【发布时间】:2009-12-05 05:07:28
【问题描述】:
我有一个宏,可以将数百行数据添加到 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
【问题讨论】:
标签: excel optimization vba