gpt4 book ai didi

vba - 加快 Excel VBA 中注释的处理速度

转载 作者:行者123 更新时间:2023-12-02 07:16:53 30 4
gpt4 key购买 nike

这是我设计的一个示例,我创建它是为了解释我遇到的问题。基本上我希望这段代码运行得比它更快。在新工作表上,单元格的每个循环启动速度很快,但如果让它运行到接近完成,然后再次运行它,每个单元格将达到 100 毫秒。在我的工作表中,我有 16000 个单元格,其中有很多这样的注释,并且每次代码运行时都会单独操作它们。在这个例子中它们显然都是相同的,但在实际应用中每一个都是不同的。

有什么办法可以让这个过程更快吗?

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 不允许我添加包含所有这些注释的工作簿文件。经过与 Microsoft 合作 6 个月后,该问题现已成为 VSTO 和 Excel 中已确认的错误。

https://connect.microsoft.com/VisualStudio/feedback/details/1610713/vsto-hangs-while-editing-an-excel-macro-enabled-workbook-xlsm-file

最佳答案

根据 MSDN Comments collectionComment object文档中,您可以通过索引位置引用工作表中的所有注释并直接处理它们,而不是循环遍历每个单元格并确定它是否包含注释。

Dim c As Long
With ActiveSheet '<- set this worksheet reference properly!
For c = 1 To .Comments.Count
With .Comments(c)
Debug.Print .Parent.Address(0, 0) ' the .parent is the cell containing the comment
' do stuff with the .Comment object
End With
Next c
End With

另外根据官方文档 Range.SpecialCells method您可以使用 xlCellTypeComments 轻松确定工作表中的单元格子集常量作为 Type 参数。

Dim comcel As Range
With ActiveSheet '<- set this worksheet reference properly!
For Each comcel In .Cells.SpecialCells(xlCellTypeComments)
With comcel.Comment
Debug.Print .Parent.Address(0, 0) ' the .parent is the cell containing the comment
' do stuff with the .Comment object
End With
Next comcel
End With

我仍然不清楚用空白注释填充所有未注释单元格背后的原因,但如果您尝试仅在工作表上使用注释,最好使用注释单元格的子集而不是循环遍历所有单元格寻找评论。

关于vba - 加快 Excel VBA 中注释的处理速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31234053/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com