我有一个包含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标记的下一个实例,但事实并非如此。提前感谢您提供的任何帮助。
答案 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)引用?