我的问题有点宽泛,但我发现这个问题非常有趣。
有时我必须使用VBA代码在Excel工作表中创建/清除注释:
Range(someRange).ClearComments
或
.Comment.Shape.Width = 200
与我的代码中的其他复杂计算相比,这些操作需要花费大量时间(例如每个1秒)。
每次执行代码时,我都会将automaticCalculations
,screenUpdating
和EnableEvents
关闭,但这似乎并没有太大的区别。
关于如何加快这些行动的任何想法?
excel在这个命令中做了多少工作呢?
编辑: 宏在具有大量数据(100x40,000个单元格)的工作表上运行。 然而,执行只需要这部分数据的一小部分。 我认为单独执行相同的数据部分,采用新工作表的速度要快得多。
答案 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个。