这是我的问题(How to search/find for multiple format styles in VBA for Word?)的后续问题。这次,我们没有导航到标题为“附录”的标题,而是在每个标题的开头删除了一些字符,而不是在每个标题的开头插入文本。
试图摆脱第一个数字以及后面的空格或多样式段落的句点。例如,我们的标题为“ 4附录A ”,“ 5.1简介”,“ 10.2.3词汇表... ”,将会重命名为“ 附录A ”,“ 1简介”,“ 2.3词汇表... ”。
导航到附录部分后,我删除了Selection.TypeText Text:=" *Test* " Selection.MoveStart wdParagraph, 1
行,并用下面的代码替换了Selection.TypeText Text:=" *Test* "
语句中的If found Then
。
`If found Then
Selection.HomeKey Unit:=wdLine
If IsNumeric(Selection.Characters(2) = True) Then
Selection.Delete Unit:=wdCharacter, Count:=3
Selection.MoveStart wdParagraph, 1
ElseIf IsNumeric(Selection.Characters(1) = True) Then
Selection.Delete Unit:=wdCharacter, Count:=2
Selection.MoveStart wdParagraph, 1
Else
Selection.MoveStart wdParagraph, 1
End If
End If`
获取运行时错误'5941'-所请求的集合成员不存在。 If IsNumeric(Selection.Characters(2) = True) Then
似乎是导致错误的原因。如果在Count:=3
语句中将'2'更改为'1',将Count:=2
更改为If
,将'1'更改为'2',将Count:=2
更改为{{ 1}} ElseIf Count:=3 in the
ElseIf`,并且只删除两位数字的两位数,留下不需要的空格或句点,即“ .2.3词汇表... ”或“ 附录G ”。
答案 0 :(得分:1)
由于Characters(2)
而导致错误5941的原因。这不是您想像的那样。那只会从选择中获得第二个字符,而不是两个字符。并且所选内容是一个闪烁的插入点,因此不包含两个字符。错误消息:您要告诉我获得第二个字符,但是没有两个字符,因此我无法满足您的要求。
该行中的另一个问题(您尚未看到):括号应该位于=之前,而不是True之后:If IsNumeric(Selection.Characters(2))= True。
由于必须测试多个字符,因此需要对选择(或Range
)进行扩展。 Word VBA提供了许多“移动”方法。等效于按住Shift并按键盘上的右箭头为MoveEnd
,并且可以使用诸如MoveEndWhile
和MoveEndUntil
之类的变体来指定条件。 (可选)它们可以返回已移动的字符数(如下面的代码所示)。
以下方法使用MoveEndWhile
首先获取数字字符(直到下一个不再是数字为止):MoveEndWhile("0123456789", wdForward)
...随后扩展直到下一个字符不再是{{1} }。
此.
然后被删除。 (如果有您感兴趣的信息,也可以在其中插入Range
行以打印出Debug.Print
的内容和移动的字符数-只需删除注释标记Range
)。
请注意,如果其他人有兴趣查看它的全部内容,那么我已经包含了完整的代码。上一个问题中不再相关的部分已被删除。您会发现标记为'
的新零件。
'''NEW CODE HERE