我需要获取Word文档中当前的滚动位置(我认为这是正确的术语;即我的虚拟镜头指向文档的位置,而不是光标所在的位置),以便当我运行宏时我可以返回到最后的那个位置。
我编写了一个宏,从当前光标位置向后搜索专利申请零件号,将候选下一个可用零件号确定为前一个最大值 + 1,然后搜索出现在光标下方的数字的排序列表以查看候选零件号是否与下一个使用的数字发生碰撞,如果发生碰撞,则将候选数字加 1 并再次检查碰撞,直到找到最小的未使用整数,以尽可能遵循在描述正文中引入部件的约定按零件号顺序。
然后它将该数字插入到当前光标位置。效果很好;但是,它将当前行移动到查看窗口的顶部,这会让人迷失方向。我宁愿将卷轴保留在原处。这是我的代码:
Sub InsertLocalNextPartNum()
Application.ScreenUpdating = False
Dim re As VBScript_RegExp_55.RegExp
Set re = New VBScript_RegExp_55.RegExp
re.pattern = "\b(\d{2,3}\b)"
' 2-3 位数字对于部件号来说有点过多,但就我的问题而言,我们不需要完整的正则表达式
re.IgnoreCase = False
re.Global = True
Dim txt As String
Dim allLongMatches As MatchCollection, m As Match
Dim nums() As Long
Dim numsColl As New Collection
Dim maxNum As Long
maxNum = 0
Dim nextPartNum As String
Dim localNextPartNum As String
localNextPartNum = 0
Dim i As Long
Dim j As Long
Dim k As Long
Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
txt = Selection.Range.text
If re.Test(txt) Then
Set allLongMatches = re.Execute(txt)
For Each m In allLongMatches
numsColl.Add (m.Value)
Next m
End If
ReDim nums(1 To numsColl.Count)
For i = 1 To numsColl.Count
nums(i) = numsColl(i)
If nums(i) > maxNum Then maxNum = nums(i)
Next i
localNextPartNum = maxNum + 1
Selection.MoveRight
Selection.EndKey Unit:=wdStory, Extend:=wdExtend
txt = Selection.text
If re.Test(txt) Then
Set allLongMatches = re.Execute(txt)
For Each m In allLongMatches
numsColl.Add (m.Value)
Next m
End If
ReDim nums(1 To numsColl.Count)
Dim numTemp As String
Dim lngMin As Long
Dim lngMax As Long
lngMin = LBound(nums())
lngMax = UBound(nums())
For i = 1 To numsColl.Count
nums(i) = numsColl(i)
Next i
For j = lngMin To lngMax - 1
For k = j + 1 To lngMax
If nums(j) > nums(k) Then
numTemp = nums(j)
nums(j) = nums(k)
nums(k) = numTemp
End If
Next k
Next j
For i = 1 To numsColl.Count
If localNextPartNum < nums(i) Then Exit For
' Debug.Print nums(i)
If localNextPartNum = nums(i) Then localNextPartNum = nums(i) + 1
Next i
Selection.MoveLeft
Selection.InsertAfter (localNextPartNum & " ")
Selection.MoveRight
End Sub
要捕获窗口滚动位置,请使用:
scrollPosition = ActiveWindow.ActivePane.VerticalPercentScrolled
要将其设置回原来的用途:
ActiveWindow.ActivePane.VerticalPercentScrolled = scrollPosition
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)