У меня есть то, что я думаю, довольно короткий сценарий VBA excel, который в основном копирует данные на другой лист, если есть данные, а затем отображает его, как мне нужно, чтобы он отображался для печати.Excel VBA работает очень медленно
Он работает очень медленно
Как вы можете видеть, что я попытался отключить автоматическое вычисление и обновление экрана. Это, я думаю, ускоряет его. Но по-прежнему требуется несколько минут на то, что, как я думаю, займет секунду.
Sub Button2_Click()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
With Worksheets("sheet2").PageSetup
.PaperSize = xlPaperStatement
.Orientation = xlLandscape
.LeftMargin = Application.InchesToPoints(1.5)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(1.25)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.Zoom = 100
.PrintErrors = xlPrintErrorsDisplayed
End With
Dim rows, colum, length, i, a, b, c As Integer
length = Worksheets("Sheet1").Cells(Worksheets("Sheet1").rows.Count, "A").End(xlUp).Row
i = 1
For rows = 3 To length
For colum = 4 To 6
If colum = 5 Then
GoTo NextIteration
End If
If IsEmpty(Worksheets("Sheet1").Cells(rows, colum)) Then
GoTo NextIteration
Else
Worksheets("Sheet2").rows(i).RowHeight = 90
Worksheets("Sheet2").rows(i + 1).RowHeight = 3.6
Worksheets("Sheet2").rows(i + 2).RowHeight = 79.6
Worksheets("Sheet2").rows(i + 3).RowHeight = 93.2
a = Len(Worksheets("Sheet1").Cells(rows, colum))
b = InStr(1, Worksheets("Sheet1").Cells(rows, colum), " ")
c = a - b + 1
Worksheets("Sheet2").Cells(i, 2).Value = Mid(Worksheets("Sheet1").Cells(rows, colum), InStr(1, Worksheets("Sheet1").Cells(rows, colum), " "), c)
Worksheets("Sheet2").Cells(i + 2, 2).Value = Format(Worksheets("Sheet1").Cells(rows, 1), "Medium Time")
i = i + 4
End If
NextIteration:
Next colum
Next rows
Worksheets("Sheet2").Columns("A:A").ColumnWidth = 13
Worksheets("Sheet2").Columns("B:B").ColumnWidth = 77
Worksheets("Sheet2").Columns("B:B").Font.Name = "David"
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Возможно ли, что наличие режима просмотра, установленного на макет страницы, заставит его замедлить работу?
Я переключил его обратно в обычный режим просмотра, и он работает почти мгновенно.
Связь с принтером может замедлить работу; особенно если это беспроводной принтер, сетевой принтер или один, который переходит в режим ожидания. Сначала установите принтер (желательно на запись в pdf или напишите в файл) и оптимизируйте свой код. Все это - просто латентность связи с принтером. – Jeeped
Каково типичное значение длины (количество строк в Sheet1)? – OldUgly
Так что я попытался сменить принтер на запись-в-pdf, и это помогло еще немного, да! для непрерывных улучшений. Типичная длина - 38 строк, возможно, не более 60 строк. –