У меня есть макрос, который добавляет сотни строк данных в таблицу Excel. Я вызываю процедуру из цикла, которая вставляет каждую строку данных. Я применяю форматирование строки каждый раз, когда вставляю эти данные. Однако во время тестирования я обнаружил, что могу вставлять все данные примерно на 3/4 секунды быстрее (3,3 с против 4,11 с), когда я не применяю форматирование построчно, но все сразу. Проблема, которую я пытаюсь преодолеть, заключается в том, что не все строки имеют одинаковое форматирование; Тем не менее, существует предсказуемая закономерность. Две строки одного форматирования и одна строка различного форматирования. Есть ли способ без зацикливания применить эти два разных формата в одном, что позволило бы мне сохранить прирост производительности, который я получаю (пользователи хотели бы видеть ответ менее чем за 2 секунды, чтобы это могло быть большим выигрышем).
В настоящее время я использую следующий код (при этом все настройки приложения, такие как обновление экрана, вычисления и события отключены)
Private Sub BuildTerminalSummary(ByRef terminals, ByVal timeFrame)
Dim terminal As clsTerminal
Dim curSheet As Worksheet
Dim breakLoop As Boolean
Dim terminalCode As String
Dim rowNumber As Long
Set terminal = New clsTerminal
Set curSheet = Sheets("Terminal Summary")
rowNumber = 7
'Remove all content, borders, and tint
ClearPage curSheet, rowNumber
For Each terminal In terminals
AddDetailData curSheet, terminal.InfoArray, rowNumber
AddDetailData curSheet, terminal.PriorInfoArray, rowNumber + 1
AddDiffPercentFormulas curSheet, terminal.DiffPercentInfoArray, rowNumber + 2
rowNumber = rowNumber + 2
Next terminal
'Make sure the columns are wide enough to display the numbers
curSheet.Cells.EntireColumn.AutoFit
End Sub
Private Sub AddDetailData(ByRef curSheet, ByRef data, ByVal rowNumber)
With curSheet
With .Cells(rowNumber, 3).Resize(1, 16)
.value = data
.Style = "Comma"
.NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""??_);_(@_)"
End With
'This overides the formatting in the revenue columns with currency instead of comma style
With .Cells(rowNumber, 5).Resize(1, 2)
.Style = "Currency"
.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
End With
With .Cells(rowNumber, 13).Resize(1, 6)
.Style = "Currency"
End With
End With
End Sub
Private Sub AddDiffPercentFormulas(ByRef curSheet, ByRef data, ByVal rowNumber)
With curSheet.Cells(rowNumber, 3).Resize(1, 16)
.value = data
.NumberFormat = "0.00%"
End With
End Sub