Бен,
Прежде всего, нужно добавить несколько элементов управления, чтобы убедиться, что Excel не позволяет вычислять вещи:
Application.ScreenUpdating=False
Application.Calculation = xlCalculationManual 'xlCalculationAutomatic to revert back
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.DisplayStatusBar = False
Application.StatusBar = False
Затем вы сделали замечательную вещь, используя Worksheets(sheetName)
, чтобы убедиться, что ваш код действительно выполняется на хорошем рабочем листе, но вы должны действительно заключить его в блок With
, чтобы избежать кода, чтобы оценить, что это за объект Worksheet:
With Worksheets(sheetName)
' Handle case where sheet is hidden
If .Visible = False Then
.Visible = True
vFlag = True
....
' Hide sheet if it was unhidden above
If vFlag = True Then
.Visible = False
vFlag = False
End If
End with
Наконец, подумайте озапись значения в вашу ячейку вместо копирования-вставки, потому что копирование-вставка очень медленная.Подумайте об ограничении макроса тем диапазоном, который реально использует ваш лист.
'Supposing your data start at A1
Dim EndRow As Long
Dim EndColumn As Long
With Worksheets(sheetName)
EndRow = .Range("A" & .Rows.Count).End(xlUp).Row
EndColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column
.Range(.Cells(1, 1), .Cells(EndColumn, EndColumn)).Value2 = .Range(.Cells(1, 1), .Cells(EndColumn, EndColumn)).Value2
End With