блоки
етил, что некоторые люди будут использоватьSet Object = Nothing
в процедурах закрытия. Мне удалось выяснить, почему это полезно для экземпляров Access, но ни один ответ не был удовлетворительным, когда дело доходит до этого для Excel, поэтомуВ чем именно заключается преимущество установки объектов в Nothing?
Я добавил его в свой код в качестве примера, чтобы поддержать этот вопрос, но разве это пустая трата пространства? Если это хорошая практика, почему?
Что касается кода, никаких проблемс участием или жебез Set = Nothing
, Я получаю данные из системного экспорта, в котором есть лишние столбцы, которые нам не нужны. Чтобы уменьшить количество итераций копирования / вставки, я собираю все диапазоны с объединением, за исключением двух. Порядок последних двух столбцов необходимо изменить, поэтому я был вынужден скопировать / вставить их отдельно.
With CurrentBook.ActiveSheet
Dim LRow2 As Long
LRow2 = .Range("BG" & .Rows.Count).End(xlUp).Row
Dim Range1 As Range: Set Range1 = .Range("A2:C" & LRow2)
Dim Range2 As Range: Set Range2 = .Range("F2:F" & LRow2)
Dim Range3 As Range: Set Range3 = .Range("H2:H" & LRow2)
Dim Range4 As Range: Set Range4 = .Range("M2:M" & LRow2)
Dim Range5 As Range: Set Range5 = .Range("P2:P" & LRow2)
Dim Range6 As Range: Set Range6 = .Range("S2:S" & LRow2)
Dim Range7 As Range: Set Range7 = .Range("V2:V" & LRow2)
Dim Range8 As Range: Set Range8 = .Range("X2:X" & LRow2)
Dim Range9 As Range: Set Range9 = .Range("AD2:AD" & LRow2)
Dim Range10 As Range: Set Range10 = .Range("AR2:AX" & LRow2)
Dim Range11 As Range: Set Range11 = .Range("AY2:AY" & LRow2)
Dim Range12 As Range: Set Range12 = .Range("AZ2:AZ" & LRow2)
End With
Dim CopyRange As Range: Set CopyRange = Union(Range1, Range2, Range3, Range4, Range5, Range6, Range7, Range8, Range9, Range10)
CopyRange.Copy
ws.Range("A2").PasteSpecial xlPasteValues
Range12.Copy
ws.Range("S2").PasteSpecial xlPasteValues
Range11.Copy
ws.Range("T2").PasteSpecial xlPasteValues
'''''''''''''''
''''Closing''''
'''''''''''''''
Closing:
CurrentBook.Close False
ws.Range("A1").Select
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Set MyFile = Nothing: Set ws = Nothing: Set CurrentBook = Nothing
Set Range1 = Nothing: Set Range2 = Nothing: Set Range3 = Nothing: Set Range4 = Nothing: Set Range5 = Nothing
Set Range6 = Nothing: Set Range7 = Nothing: Set Range8 = Nothing: Set Range9 = Nothing:
Set Range10 = Nothing: Set Range11 = Nothing: Set Range12 = Nothing
Set CopyRange = Nothing
Exit Sub