在mac上的Excel中的进度条

时间:2014-02-23 05:01:46

标签: macos excel vba excel-vba-mac

我在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

2 个答案:

答案 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

使更新频率降低。尝试一下,直到得到你想要的结果。

来源:http://www.ozgrid.com/forum/showthread.php?t=160203

答案 1 :(得分:0)

我还没有声誉点来发表评论,但我想我应该指出@Floris的建议:

    If Mod(x, 10) = 0 Then DoEvents

仅适用于工作表功能。要在VBA中使用Mod,您需要使用以下语法:

    If x Mod 10 = 0 Then DoEvents

至少,这就是我在计算机上使用Excel for Mac 2011的方式。