Maneira mais eficiente de adicionar formatação do Excel - VBA
Eu tenho uma macro que adiciona centenas de linhas de dados para uma planilha do Excel. Eu chamo um procedimento de um loop que insere cada linha de dados. Eu tenho aplicado a formatação da linha toda vez que insiro esses dados. No entanto, durante meus testes, descobri que posso inserir todos os dados cerca de 3/4 de segundo mais rápido (3,3 seg. Contra 4,11 seg.) Quando não aplico a formatação linha a linha, mas de uma só vez. O problema que estou tentando superar é que nem toda linha tem a mesma formatação; no entanto, há um padrão previsível. Duas linhas de uma formatação e uma linha de formatação diferente. Existe uma maneira sem loop para aplicar esses dois formatos diferentes, todos em um que me permitiria manter os ganhos de desempenho que estou recebendo (os usuários gostariam de ver uma resposta sub 2 segundo, então isso poderia ser um grande ganho).
No momento, estou usando o código a seguir (as configurações do aplicativo, como screenupdating, cálculos e eventos, estão desativadas durante esse processo)
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