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

使用VBA自动更改Word中的文档结构,vba,replace,ms-word,Vba,Replace,Ms Word,我正在尝试调整word文档中的一些小结构问题,该文档是另一个软件的输出,我无法控制它 这是我在MicrosoftWord中使用VBA的第一次尝试,我很难理解文本文档中的索引和“行号” 我试图解决的问题是: 我收到一份word文档(50-100页长),该文档最终是一个项目及其描述的目录,但是一个特定的描述有多余的回车(即第^p段)。我想创建一个for循环,该循环执行以下操作(基于EXCEL基于行和基于列的逻辑): 1) 浏览整个文档,根据短语“特定列表:”和“另一个特定列表:”的位置创建两个索引向

我正在尝试调整word文档中的一些小结构问题,该文档是另一个软件的输出,我无法控制它

这是我在MicrosoftWord中使用VBA的第一次尝试,我很难理解文本文档中的索引和“行号”

我试图解决的问题是:

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

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

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

3a)如果两个短语相隔一行,则什么也不做

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
如何计算所选内容中的段落数(输入“^p”?
我在搜索时的“查找和替换”窗口中看到了这一点,它表示“word find x of”

您真的不需要宏来执行此操作-可以通过通配符查找/替换来完成,其中:

Find = [^13]{1,}(Item [0-9])
Replace = ^32\1
Find = [^13]{2,}
Replace = ^p
无论是否将“查找字体”参数设置为粗体。当然,您可以将Find/Replace记录为宏。类似地,删除多余的段落分隔符与执行通配符查找/替换一样简单,其中:

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

没有粗体字-这是一个没有告诉我们很多东西的文本。。。你可以使用问题下面的链接来加强这一点,使之更有意义。此外,如果你想让文字专家理解,你必须使用“文字说话”。“case return”在世界上没有任何意义-你是说“carry return”吗?“行”(Shift+Enter)和段落(Enter)在单词上有很大的区别。你到底是什么意思?我怀疑这段话,但重要的是要确定。此外,是否要删除“行”或段落?您是否尝试过使用Word的“查找”功能开始使用所需的基本代码?谢谢Cindy,文本并不重要,我将其包括在内是为了让您了解文档的结构。我只想处理列表(我用粗体突出显示)。我试过用它作为到达那里的手段。我想我很接近了。如何从find中提取计数?当我使用高级搜索功能进行搜索时,搜索框中有一行写着“word Find x items matching your criteria”我想使用该计数运行for循环以替换除最后一段以外的所有段落(enter)^pI回答了您发布的关于计数的单独问题-在该评论之前看到了它。这解决了你在这里想问的问题吗?谢谢你的回答;您包含的查找和替换代码段都不起作用。Word找不到任何东西。我需要能够区分特定的格式,并且只在特定情况下(当一个列表跨多行而不是逗号分隔的列表时)去掉段落分隔符。我需要能够做到这一点,在一个100多页的文件,其内容可能会改变。许多列表只包含一个条目,但那些包含多个条目的列表被分成几行。这表明您没有选中“使用通配符”选项。。。此外,第一个F/R代码将只查找并处理单词“List”前面的段落分隔符。