我正在使用vba检查电子表格中的删除线文本.如
ActiveCell.Font.Strikethrough
Run Code Online (Sandbox Code Playgroud)
只检测整个单元格中的删除线,我使用下面的代码来计算具有删除线的单个字符.
Dim iCh As Long
Dim StrikethroughFont As Long: StrikethroughFont = 0
If Len(ActiveCell) > 0 Then
For iCh = 1 To Len(ActiveCell)
With ActiveCell.Characters(iCh, 1)
If .Font.Strikethrough = True Then
StrikethroughFont = StrikethroughFont + 1
End If
End With
Next iCh
End If
Run Code Online (Sandbox Code Playgroud)
代码可以正常工作.问题是执行时间随着单元格内容的长度呈指数增长.
我知道Excel不是用于在单元格中编写故事并用删除线修改它们.但我无法控制人们对这些电子表格的处理方式.大多数人表现得很好,但有时候个人会夸大其词.我不希望这个人让我的工作看起来很糟糕.我发现一个不那么好的解决方法是添加一个
And Len(ActiveCell) < 1000
Run Code Online (Sandbox Code Playgroud)
语句到第一个If,以便它完全跳过超过1000个字符的单元格.我担心我使用的Excel 2010 SP2不能很好地处理ActiveCell.Characters(iCh,1).
有什么建议可以加快速度吗?
阅读了许多有价值的回复和评论之后的问题更新 如前所述,我在第3行的问题中做了不正确的陈述并立即更新,以免误导尚未阅读所有评论的读者:
ActiveCell.Font.Strikethrough
Run Code Online (Sandbox Code Playgroud)
实际上可以检测单元格中的部分删除线文本:可能的返回值是FALSE,TRUE和NULL,后者意味着单元格中有删除线和普通字体的混合.这对问题的"指数"部分没有影响,但对"解决方法"部分有很多影响.