从VBA for Word中的多个样式段落的开头删除字符

时间:2019-07-12 22:36:31

标签: vba ms-word

这是我的问题(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 ”。

1 个答案:

答案 0 :(得分:1)

由于Characters(2)而导致错误5941的原因。这不是您想像的那样。那只会从选择中获得第二个字符,而不是两个字符。并且所选内容是一个闪烁的插入点,因此不包含两个字符。错误消息:您要告诉我获得第二个字符,但是没有两个字符,因此我无法满足您的要求。

该行中的另一个问题(您尚未看到):括号应该位于=之前,而不是True之后:If IsNumeric(Selection.Characters(2))= True。

由于必须测试多个字符,因此需要对选择(或Range)进行扩展。 Word VBA提供了许多“移动”方法。等效于按住Shift并按键盘上的右箭头为MoveEnd,并且可以使用诸如MoveEndWhileMoveEndUntil之类的变体来指定条件。 (可选)它们可以返回已移动的字符数(如下面的代码所示)。

以下方法使用MoveEndWhile首先获取数字字符(直到下一个不再是数字为止):MoveEndWhile("0123456789", wdForward) ...随后扩展直到下一个字符不再是{{1} }。

.然后被删除。 (如果有您感兴趣的信息,也可以在其中插入Range行以打印出Debug.Print的内容和移动的字符数-只需删除注释标记Range)。

请注意,如果其他人有兴趣查看它的全部内容,那么我已经包含了完整的代码。上一个问题中不再相关的部分已被删除。您会发现标记为'的新零件。

'''NEW CODE HERE