我的问题有点宽泛,但我觉得这个问题非常有趣。
有时我不得不使用VBA代码在Excel工作表中创建/清除注释,如:
Range(someRange).ClearComments
或
.Comment.Shape.Width = 200
与我代码中的其他复杂计算相比,这些操作花费了大量的时间(每个操作大约1秒)。每次执行代码时,我都会关闭automaticCalculations
、screenUpdating
和EnableEvents
,但这似乎没有太大区别。关于如何加快这些行动,有什么想法吗?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