逐个Excel宏更新单元格非常慢

时间:2014-09-15 07:31:15

标签: excel vba

' Remove thousand separator from all numeric cells
For each cel in Selection
    if "#,##0" = cel.NumberFormat then _
        cel.NumberFormat = "0"
Next cel

它每秒更新400个单元格,而它确实如此,Excel没有响应。我怀疑撤消历史。有没有办法在某种撤消事务中执行此操作?

2 个答案:

答案 0 :(得分:2)

根据我的经验,自动重新计算细胞是几乎所有严重的excel vba性能问题背后的罪魁祸首。要测试是否成立,请执行以下操作:

Application.Calculation = xlCalculationManual
' put your problematic code here
Application.Calculation = xlCalculationAutomatic

如果这没有帮助,另一个可能的罪魁祸首就是屏幕更新(尽管从中获得的表现要严重得多)。尝试:

Application.ScreenUpdating = False
' put your problematic code here
Application.ScreenUpdating = True

希望这对你的情况也有帮助。

答案 1 :(得分:1)

您可以在Excel中查找和替换格式。以下是Excel 2010帮助(搜索ReplaceFormat)中的示例:

  

以下示例设置搜索条件以查找包含Arial,Regular,Size 10字体的单元格,使用Arial,Bold,Size 8字体替换其格式,然后使用SearchFormat和ReplaceFormat集的可选参数调用Replace方法to True实际进行更改。

Sub MakeBold()

' Establish search criteria.
With Application.FindFormat.Font
    .Name = "Arial"
    .FontStyle = "Regular"
    .Size = 10
End With

' Establish replacement criteria.
With Application.ReplaceFormat.Font
    .Name = "Arial"
    .FontStyle = "Bold"
    .Size = 8
End With

' Notify user.
With Application.ReplaceFormat.Font
    MsgBox .Name & "-" & .FontStyle & "-" & .Size & _
        " font is what the search criteria will replace cell formats with."
End With

' Make the replacements in the worksheet.
Cells.Replace What:="", Replacement:="", _
    SearchFormat:=True, ReplaceFormat:=True

End Sub

您应该能够修改示例以进行所需的格式更改。