2013-05-21 5 views
0

Word 문서의 모든 문장을 반복하여 세미 HTML 코드로 구문 분석하려고합니다. 테스트하는 동안, 나는 닫힌 문장이없는 문장이 건너 뛰는 흥미로운 상황에 빠져 들었다. 나는 다음 두 문장이있는 경우 예를 들어, :MS Word 용 VBA 단락의 모든 문장을 반복하지 않음

을이 한 번 더 문장이 있어야 특수 문자와 와 단락의 첫 문장이다. 이 가되어야한다는 두 번째 문장입니다. **

나는 paragraph.range.sentences의 각 문장을 반복, 나는 첫 번째 문장과를 얻을 때. "**"의 끝 단락 그러나 기간과 astriks 사이에 공백을 추가하면 코드가 ". **"로 작동합니다.

마침표 뒤에 공백이 없더라도 매크로가 문장의 모든 텍스트를 읽도록하려면 어떻게해야합니까? 예제 코드는 다음과 같습니다.

Public Sub ParseDoc() 
Dim paras As Paragraphs 
Dim para As Paragraph 
Dim sents As Sentences 
Dim sent As Range 


    Set paras = ActiveDocument.Paragraphs 
    For Each para In paras 
     Set sents = para.Range.Sentences 
     For Each sent In sents 
      MsgBox (sent.Text) 
     Next 
    Next 
End Sub 

답변

0

"words.special_character"형식으로 문장의 모든 문자를 "읽는"방법을 알 수는 없지만 Word 문서의 모든 마침표 + special_character 인스턴스를 바꾸면 모두 For each loops work. 내 하위 모듈의 시작 부분에 다음 코드를 사용하고 모든 것이 예상대로 작동했습니다.

'Adds a <SPACE> between a period and a non-alphanumeric character 
With ActiveDocument.Range.Find 
    .Text = ".([!0-9A-z ])" 
    .Replacement.Text = ". \1" 
    .MatchWildcards = True 
    .Execute Replace:=wdReplaceAll 
End With 
0

첫 번째 별표에 문제가있는 것 같습니다. 첫 번째 별표를 다른 것으로 변경하면이 코드가 원하는대로 실행됩니다. 나는 이것이 특별한 행동인지 모른다. 그러나 당신이 ActiveDocument.Paragraphs(1).Range.Sentences(2).text을 언급하면, 문장의 전체 텍스트는 예상대로이다.

while ... wend 및 incremental 카운터를 사용하여 루프를 간단하게 다시 작성하면 인덱스를 사용하여 항목을 참조 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 나는 "#"문자와 비슷한 것을 발견했지만 대부분의 문자는 괜찮습니다. 왜 이런 일이 일어나고 있는지 약간 궁금합니다. 루프를 다시 작성하고 작동하도록 할 수 있는지 알아 봅시다. – Michael

+0

나는 아주 빨리 escape sequence에 대한 노트를 보았지만 많은 관련성없는 검색 결과가 있습니다. – horatio

관련 문제