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



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

有时我不得不使用VBA代码在Excel工作表中创建/清除注释,如:

Range(someRange).ClearComments

.Comment.Shape.Width = 200

与我代码中的其他复杂计算相比,这些操作花费了大量的时间(每个操作大约1秒)。每次执行代码时,我都会关闭automaticCalculationsscreenUpdatingEnableEvents,但这似乎没有太大区别。关于如何加快这些行动,有什么想法吗?excel在这个如此耗时的命令中做了什么?

编辑:宏在包含大量数据(100x40000个单元格)的工作表上运行。然而,执行过程只需要这些数据的一小部分。我认为,仅对同一数据部分执行,带到新的工作表上会更快。

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

Application.ScreenUpdating设置为False。记得在宏结束时将ScreenUpdating属性设置回True

如果您多次执行CCD_ 11,使用With Statement使VBA避免不必要的路径限定。

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

关于如何提高宏速度的更多信息,请点击此处。

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

我使用了这个例子,它在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

最新更新