2012-06-22 5 views
1

나는 html 태그로 정의 된 많은 html 문서를 포함하는 워드 문서를 가지고 있습니다. 배열 또는 범위 컬렉션을 만들고 싶습니다. 각 범위는 하나의 html 문서로 구성됩니다. 예를 들어, 다음 Word 문서입니다 :VBA를 사용하는 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을 채우는 싶습니다() 범위로 범위의 시리즈, 개구부 내의 텍스트를 포함하고 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 태그의 다음 인스턴스에 대한 문서를 검색을 계속 것이라고 기대하지만,했다 그것은 사실이 아닙니다. 제공 할 수있는 도움에 미리 감사드립니다.

답변

1

내가 놓친 부분은 Loop 문 바로 앞의 .Execute 문이 원래의 .Find가 계속됩니다. 문서에 얼마나 많은 HTML 문서가 포함되어 있는지 미리 계산하지 않았으므로 ReDim Preserve 문을 추가했습니다. 이제 루프의 끝은 다음과 같습니다.

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

희망이 있으면 누군가에게 도움이됩니다.

1

범위 개체 모음이이 경우 더 잘 작동합니까? 컬렉션 개체를 만들고 검색을 반복 할 때마다 새 범위 개체를 만든 다음 컬렉션에 추가합니다. 그런 식으로 각 HTML 문서 colRanges (n)로 refereced 수 있을까?

+0

컬렉션을 통해 배열에 대한 이점이 있습니까? –

+0

루핑 코드를 어떻게 수행하고 싶은지, 그리고 그것을 얻은 후에 범위를 가지고 무엇을하고 있는지에 달려 있습니다. 또한 어레이 바의 재조정에 대해 걱정할 필요가 없으며 필요한 경우 컬렉션에서 직접 작업 할 수 있습니다. 컬렉션이 있다면'colRanges의 각 varObj에 대해 '와 같은 것을 수행하여 루프를 수행 할 수 있습니다. i = i + 1; set varObj = colRanges (i); {다른 코드}; 다음. 네가하는 일이 훌륭하다면. 개인적으로 범위와 같은 객체를 처리 할 때 모음집으로 작업하는 것이 좋습니다. – KFleschner