使用VBA进行Word文档迭代

时间:2012-06-22 18:19:17

标签: vba ms-word word-vba

我有一个包含html标签定义的许多html文档的word文档。我想创建一个数组或范围集合,每个范围包含一个html文档。例如,这是Word文档:

<html> <head> <title> </title> </head> <body> HTML Doc 1 </body> </html>
<html> <head> <title> </title> </head> <body> HTML Doc 2 </body> </html>
<html> <head> <title> </title> </head> <body> HTML Doc 3 </body> </html>

等。我想用一系列范围填充rngHTMLDocs()As Range,每个范围包含每个开始和结束html标记内的文本。

我创建了以下代码,试图遍历定义这些范围的整个文档,但它只是继续选择HTML Doc 1.我想我可能以错误的方式接近整个迭代事物。无论如何,这是代码:

Set rngDocContent = ActiveDocument.Content
intCounter = 1
With rngDocContent.Find
    .ClearFormatting
    .Text = "<html>"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Execute
    Do While .Found = True
        Set rngTemp = rngDocContent.Duplicate
        rngTemp.Select
        Selection.Extend
         With Selection.Find
             .ClearFormatting
             .Text = "</html>"
             .Replacement.Text = ""
             .Forward = True
             .Wrap = wdFindAsk
             .Execute
        End With
        Set rngHtmlDocs(intCounter) = Selection.Range
        Selection.Start = Selection.End
        intCounter = intCounter + 1
     Loop
 End With

在为整个文档设置rngDocContent并使用wdFindContinue时,我曾希望它实际上会继续在文档中搜索打开html标记的下一个实例,但事实并非如此。提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:1)

想出我错过的是Loop语句之前的.Execute语句,因为这是导致原始.Find继续的原因。我还添加了一个ReDim Preserve语句,因为我事先没有计算文档中包含多少HTML文档。所以现在循环的结束看起来像这样:

       Set rngHtmlDocs(intCounter) = Selection.Range
       Selection.Start = Selection.End
       intCounter = intCounter + 1
       ReDim Preserve rngHtmlDocs(intCounter)
       .Execute
    Loop
End With

希望这有助于某人。

答案 1 :(得分:1)

在这种情况下,范围对象的集合会更适合您吗?创建一个集合对象,并在搜索的每次迭代中创建一个新的范围对象,然后将其添加到集合中。这样每个html文档都可以作为colRanges(n)引用?