我在vba中使用进度条和Excel,但除非我单步执行,否则它不会显示在我的Mac上,然后它可以正常工作。有什么建议吗?
Sub Delete_duplicates()
Dim x As Integer
Dim LastRow As Long
Dim xMax As Long
Dim MyTimer As Double
LastRow = Range("A65536").End(xlUp).Row
xMax = LastRow
For x = LastRow To 1 Step -1
Application.StatusBar = "Progress: " & x & " of " & Format(xMax)
If Application.WorksheetFunction.CountIf(Range("A3:A" & x), Range("A" & x).Text) > 1 Then
Range("A" & x).EntireRow.Delete
End If
Next x
Application.StatusBar = False
End Sub
答案 0 :(得分:0)
如果您将DoEvents
添加到循环中,状态栏将会更新。像这样:
For x = LastRow To 1 Step -1
Application.StatusBar = "Progress: " & x & " of " & Format(xMax)
DoEvents ' <<<<<<< new line
If Application.WorksheetFunction.CountIf(Range("A3:A" & x), Range("A" & x).Text) > 1 Then
Range("A" & x).EntireRow.Delete
End If
Next x
您可能会考虑不在每一行上执行此操作 - 例如,您可以拥有一行
If Mod(x, 10) = 0 Then DoEvents
使更新频率降低。尝试一下,直到得到你想要的结果。
答案 1 :(得分:0)
我还没有声誉点来发表评论,但我想我应该指出@Floris的建议:
If Mod(x, 10) = 0 Then DoEvents
仅适用于工作表功能。要在VBA中使用Mod,您需要使用以下语法:
If x Mod 10 = 0 Then DoEvents
至少,这就是我在计算机上使用Excel for Mac 2011的方式。