【发布时间】:2015-07-05 19:13:44
【问题描述】:
这是我设计的一个示例,我创建它是为了解释我遇到的问题。基本上我希望这段代码比它运行得更快。在一张新的工作表上,一个单元的每个循环都快速启动,但如果你让它运行到接近完成,然后再次运行,它将达到每个单元 100 毫秒。在我的工作表中,我有 16000 个单元格,其中包含很多这样的 cmets,并且每次代码运行时都会单独操作它们。在这个例子中,它们显然都是相同的,但在实际应用中,它们是不同的。
有没有办法让这个过程更快?
Option Explicit
Public Declare PtrSafe Function GetTickCount Lib "kernel32.dll" () As Long
Public Sub BreakTheCommentSystem()
Dim i As Integer
Dim t As Long
Dim Cell As Range
Dim dR As Range
Set dR = Range(Cells(2, 1), Cells(4000, 8))
Dim rStr As String
rStr = "ABCDEFG HIJK LMNOP QRS TUV WX YZ" & Chr(10)
For i = 1 To 5
rStr = rStr & rStr
Next i
For Each Cell In dR
t = GetTickCount
With Cell
If .Comment Is Nothing Then
.AddComment
Else
With .Comment
With .Shape.TextFrame.Characters.Font
.Bold = True
.Name = "Arial"
.Size = 8
End With
.Shape.TextFrame.AutoSize = True
.Text rStr
End With
End If
End With
Debug.Print (GetTickCount - t & " ms ")
Next
rStr = Empty
i = Empty
t = Empty
Set Cell = Nothing
Set dR = Nothing
End Sub
2015 年 12 月 11 日更新,我希望在某处注明这一点,以防万一有人遇到它,我试图优化它的原因是因为 VSTO 不允许我添加包含所有这些 cmets 的工作簿文件。在与 Microsoft 合作 6 个月后,这现在是 VSTO 和 Excel 中已确认的错误。
【问题讨论】:
-
为什么要向当前不包含评论的单元格添加空白评论?难怪后续运行将有更多操作来完成 id 您将 cmets 添加到不包含一个的所有内容。
-
当你重新运行你的宏时,任何新的单元格是否会被注释或删除它们的 cmets?
标签: vba excel excel-2010 vsto