使用VBA自动在Word中更改文档结构

时间:2018-07-24 11:16:00

标签: replace ms-word word-vba

我正在尝试调整Word文档中的一些较小的结构性问题,这是我无法控制的另一软件的输出。

这是我在Microsoft Word中使用VBA的第一个尝试,我很难把头放在文本文档中的索引和“行号”上。

我要解决的问题是:

我收到一个word文档(长50-100页),该文档最终是项目及其描述的目录,但是一个特定的描述有多余的回车符(即^ p段)。我想创建一个执行以下操作的for循环(基于我的EXCEL行和基于列的逻辑):

1)浏览整个文档,并根据短语“特定列表:”和“另一个特定列表:”的位置创建两个索引向量。

2)确定这两行之间的“行”数(即,我希望它们位于后续行中)

3a)如果两个词组相隔1行,则什么都不做

3b)如果两个词组不相隔一行,则:

Sub Remove_excess_case_returns ()

for i = 1:N <  where N is the number of case returns between "Specific List:" and "Another Specific List:" minus 1

Selection.EndKey Unit:=wdLine
 Selection.TypeText Text:=", "
 Selection.Delete Unit:=wdCharacter, Count:=1

end Sub

我得到了什么(粗体字是我希望删除案例返回并以逗号分隔的列表的相关行):

...

Aenean nec lorem。在porttitor。多内克·劳雷特(Donec Laoreet) Suspendisse dui purus,摄于摄氏,生于腐烂的维他命,保胎mat,nunc。 sem venenatis eleifend的Mauris eget neque。没意思Fusce aliquet pede非pede。 Suspendisse dapibus lorem pellentesque magna。整数nulla。 Donec blandit feugiat ligula。

特定列表:项目1

另一个特定列表:项目1

整数nulla。 Donec blandit feugiat ligula。 Donec hendrerit,felis et imperdiet euismod,purus ipsum pretium metus,在拉丁裔空想中。演讲嘉奖的结果。 Etiam eget dui。 Aliquam Erat Volutpat。在Nunc Porta Tristique的Lorem坐镇。 Proin nec augue。 Quisque aliquam tempor magna。 Pellentesque居民morbi tristique senectus et netus et malesuada成名ac turpis egestas。 Nunc ac magna。 Maecenas odio dolor,vulputate vel,auctor ac,accumsan id,猫科动物。 Pellentesque诅咒矢状猫。 Pellentesque porttitor,velit lacinia egestas auctor,diam eros tempus arcu,nec vulputate augue magna vel risus。 Cras non magna vel ante adipiscing菱形。维瓦莫斯一英里。莫比·尼克。 Aliquam Erat Volutpat。整数ulbortis eros eros。 Pellentesque居民morbi tristique senectus et netus et malesuada成名ac turpis egestas。

特定列表:项目1

项目2

项目3

另一个特定列表:项目1

...

我想要的

...

Aenean nec lorem。在porttitor。多内克·劳雷特(Donec Laoreet) Suspendisse dui purus,摄于摄氏,生于腐烂的维他命,保胎mat,nunc。 sem venenatis eleifend的Mauris eget neque。没什么Fusce aliquet pede非pede。 Suspendisse dapibus lorem pellentesque magna。整数nulla。 Donec blandit feugiat ligula。

特定列表:项目1

另一个特定列表:项目1

整数nulla。 Donec blandit feugiat ligula。 Donec hendrerit,felis et imperdiet euismod,purus ipsum pretium metus,在拉丁裔空想中。演讲嘉奖的结果。 Etiam eget dui。 Aliquam Erat Volutpat。在Nunc Porta Tristique的Lorem坐镇。 Proin nec augue。 Quisque aliquam tempor magna。 Pellentesque居民morbi tristique senectus et netus et malesuada成名ac turpis egestas。 Nunc ac magna。 Maecenas odio dolor,vulputate vel,auctor ac,accumsan id,猫科动物。 Pellentesque诅咒矢状猫。 Pellentesque porttitor,velit lacinia egestas auctor,diam eros tempus arcu,nec vulputate augue magna vel risus。 Cras non magna vel ante adipiscing菱形。维瓦莫斯一英里。莫比·尼克。 Aliquam Erat Volutpat。整数ulbortis eros eros。 Pellentesque居民morbi tristique senectus et netus et malesuada成名ac turpis egestas。

特定列表:项目1,项目2,项目3

另一个特定列表:项目1

...

我当前正在使用的是这个

Sub test()

 With Selection.Find
 .Text = "Specific List:"
 .Forward = True
 .Wrap = wdFindContinue
 .Format = False
 .MatchCase = False
 .MatchWholeWord = False
 .MatchAllWordForms = False
 .MatchSoundsLike = False
 .MatchWildcards = True
 End With

 Selection.Find.Execute
 Selection.MoveRight Unit:=wdCharacter, Count:=1

 Do
 Selection.EndKey Unit:=wdLine, Extend:=wdExtend
 If InStr(1, Selection.Text, "Another Specific List:") Then Exit Do
 Selection.MoveDown Unit:=wdLine, Extend:=wdExtend

 Loop

   'p_count = NEED TO EXTRACT ^p COUNT

 If p_count > 1 Then

    For i = 1 To p_count - 1 'replace all but the last ^P
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.EndKey Unit:=wdLine
    Selection.TypeText Text:=", "
    Selection.Delete Unit:=wdCharacter, Count:=1
    Next

Else


 End If

 End Sub

如何计算所选内容中“ ^ p”段的数量(输入)? 搜索时,我在“查找和替换”窗口中看到了这一点,它指出“单词找到x出现次数为

1 个答案:

答案 0 :(得分:0)

您实际上不需要宏-都可以通过通配符查找/替换来完成,其中:

Find = [^13]{1,}(Item [0-9])
Replace = ^32\1

,无论是否将“查找字体”参数设置为粗体。您当然可以将“查找/替换”记录为宏。同样,删除多余的段落分隔符与执行通配符查找/替换一样简单,其中:

Find = [^13]{2,}
Replace = ^p