我正在使用 vba 检查电子表格中的删除线文本。作为
ActiveCell.Font.Strikethrough
仅检测整个单元格中的删除线,我使用以下代码计算带有删除线的单个字符。
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
代码可以正常工作。问题是执行时间随着单元格内容的长度呈指数增长。
- 每个单元格少于 100 个字符,代码运行速度超快。
- 在 1 个单元格中某处有 1000 个字符,执行时间为 30 秒 - 项目仍然可以接受
- 在大约半小时的 1 个单元格执行时间内某处有 3000 个字符。
- 在 1 个单元格中某处有 5000 个字符 Excel 继续看似永远运行,有时它会崩溃
我知道 Excel 不适用于在单元格中编写故事并使用删除线对其进行修改。但我无法控制人们如何使用这些电子表格。大多数人都表现得很好,但有时有些人会夸大其词。我不希望这个人让我的工作看起来很糟糕。我发现一个不太好的解决方法是添加一个
And Len(ActiveCell) < 1000
语句到第一个 If,以便它完全跳过超过 1000 个字符的单元格。我担心我正在使用的 Excel 2010 SP2 不能很好地处理 ActiveCell.Characters(iCh, 1) 。
有什么建议可以加快速度吗?
阅读许多有价值的回复和评论后更新问题 正如所指出的,我在第 3 行的问题中做了一个错误的陈述,现在更新它,以免误导尚未阅读所有评论的读者:
ActiveCell.Font.Strikethrough
可以实际检测单元格中的部分删除线文本:可能的返回值为 FALSE、TRUE 和 NULL,后者表示单元格中混合有删除线和普通字体。这对问题的“指数”部分没有影响,但对“解决方法”部分有很大影响。