gpt4 book ai didi

vba - 字VBA : iterating through characters incredibly slow

转载 作者:行者123 更新时间:2023-12-03 09:21:37 26 4
gpt4 key购买 nike

我有一个宏,可以将数字前面的单引号更改为撇号(或关闭单大引号)。通常,当您在Word中键入“the '80s”之类的内容时,“8”前面的撇号朝向错误。下面的宏可以工作,但是速度非常慢(比如每页 10 秒)。在常规语言(甚至解释型语言)中,这将是一个快速的过程。您知道为什么在 Word 2007 上使用 VBA 需要这么长时间吗?或者,如果有人拥有一些查找+替换技能,无需迭代即可完成此操作,请告诉我。

Sub FixNumericalReverseQuotes()
Dim char As Range
Debug.Print "starting " + CStr(Now)
With Selection
total = .Characters.Count
' Will be looking ahead one character, so we need at least 2 in the selection
If total < 2 Then
Return
End If
For x = 1 To total - 1
a_code = Asc(.Characters(x))
b_code = Asc(.Characters(x + 1))

' We want to convert a single quote in front of a number to an apostrophe
' Trying to use all numerical comparisons to speed this up
If (a_code = 145 Or a_code = 39) And b_code >= 48 And b_code <= 57 Then
.Characters(x) = Chr(146)
End If
Next x
End With
Debug.Print "ending " + CStr(Now)
End Sub

最佳答案

除了两个指定的(为什么...?和如何没有...?)之外,还有一个隐含的问题 - 如何通过 Word 对象进行正确迭代收藏。答案是 – 使用 obj.Next 属性而不是通过索引访问。也就是说,而不是:

For i = 1 to ActiveDocument.Characters.Count
'Do something with ActiveDocument.Characters(i), e.g.:
Debug.Pring ActiveDocument.Characters(i).Text
Next

应该使用:

Dim ch as Range: Set ch = ActiveDocument.Characters(1)
Do
'Do something with ch, e.g.:
Debug.Print ch.Text
Set ch = ch.Next 'Note iterating
Loop Until ch is Nothing

时间:00:03:30 与 00:00:06,超过 3 分钟与 6 秒。

在 Google 上找到,链接丢失,抱歉。经个人探索证实。

关于vba - 字VBA : iterating through characters incredibly slow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29552095/

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