在Excel VBA中,单元注释修改命令非常慢

时间:2015-02-23 09:01:43

标签: excel vba excel-vba

我的问题有点宽泛,但我发现这个问题非常有趣。

有时我必须使用VBA代码在Excel工作表中创建/清除注释:

Range(someRange).ClearComments

.Comment.Shape.Width = 200

与我的代码中的其他复杂计算相比,这些操作需要花费大量时间(例如每个1秒)。 每次执行代码时,我都会将automaticCalculationsscreenUpdatingEnableEvents 关闭,但这似乎并没有太大的区别。 关于如何加快这些行动的任何想法? excel在这个命令中做了多少工作呢?

编辑: 宏在具有大量数据(100x40,000个单元格)的工作表上运行。 然而,执行只需要这部分数据的一小部分。 我认为单独执行相同的数据部分,采用新工作表的速度要快得多。

3 个答案:

答案 0 :(得分:0)

Application.ScreenUpdating设为False。当宏结束时,请务必将ScreenUpdating属性设置回True

如果你多次Comment.Shape.Width次, 使用With Statement使VBA避免不必要的路径限定。

With  Comment.Shape
.Width
.Height
' More properties
End With

详细了解如何提高宏here的速度。

这会提高宏的速度,但是,如果你正在处理大量的数据,你会发现几乎没有什么改进。那么,优化代码要好得多。

答案 1 :(得分:0)

我使用了这个例子,它在A列中添加了一个单元格注释,引用了B列,我在B列中填充了1500行并运行了大约需要4秒的代码。

Delete_Comment代码是即时的。

Sub Add_Comment()
    Dim Rws As Long, Rng As Range, c As Range
    Rws = Cells(Rows.Count, "B").End(xlUp).Row
    Set Rng = Range(Cells(2, 1), Cells(Rws, 1))
    For Each c In Rng.Cells

        With c
            .ClearComments
            .AddComment
            .Comment.Visible = False
            .Comment.Text c.Offset(0, 1).Value
            .Comment.Visible = False
            .Comment.Shape.TextFrame.AutoSize = True
        End With

    Next c

End Sub


Sub Delete_Comment()
    Dim Rws As Long, Rng As Range
    Rws = Cells(Rows.Count, "B").End(xlUp).Row
    Set Rng = Range(Cells(2, 1), Cells(Rws, 1))
    Rng.ClearComments

End Sub

答案 2 :(得分:0)

我遇到了同样的问题,发现它可能是Shape.AutoSize属性。设置为true时,Excel处理注释的速度明显变慢。在我的情况下,每秒只有大约4个。