2016-05-31 6 views
-2

私は自分のドキュメントから特定のフォーマットのすべてのテキストを含む新しいドキュメントを作成する方法を探しています。指定した色でフォーマットされたすべてのテキストを検索

私がこれまでに書いたものについては、以下を参照してください、私はここにこだわっ:

  • 文書の末尾に到達したとき、私は私のループを阻止する方法を教えてくださいまたは静的なループを避けるためにコードに知性を追加する方法は、「すべての文書をスキャンする」ことですか?シンディさんの素敵な先端へ

Option Explicit 

Sub Macro1() 
    Dim objWord As Application 
    Dim objDoc As Document 
    Dim objSelection As Selection 

    Dim mArray() As String 
    Dim i As Long 
    Dim doc As Word.Document 

    For i = 1 To 100 
     ReDim Preserve mArray(i) 
     With Selection.Find 
     .ClearFormatting 
     .Font.Color = wdColorBlue 
     .Text = "" 
     .Replacement.Text = "" 
     .Forward = True 
     .Wrap = wdFindStop 
     .Format = True 
     .Execute 
     End With 

     mArray(i) = Selection.Text 

    Next 

    Set objWord = CreateObject("Word.Application") 
    Set objDoc = objWord.Documents.Add 
    objWord.Visible = True 
    Set objSelection = objWord.Selection 

    For i = 1 To 100 
    objSelection.TypeText (mArray(i)) 
    Next 
End Sub 
+1

'For i = 1 To ThisDocument.Words.Count - 1'を使ってドキュメント内のすべての単語をループすることができます。' ThisDocument.Words(i) 'で単語にアクセスできます – gizlmo

+0

現在、探しているものと同じくらい多くの検索をしたいのですが、どれくらいの出現があるかを調べることができれば、あなたの方法にはいいですよ、ありがとう。 –

+1

Wordでの検索の使用例はたくさんありますが、見つからなかったとは思えません。Find.Executeはブール値を返します。検索が成功するとTrueを返します。ブール変数を宣言し、それをTrueまたはFalseに設定し、Findを実行するDo-loopでFind.Executeが成功したかどうかをテストします。そうだったら、続けてください。そうでなければ、ループは終了する。あなたのコードにすでにある 'wdFindStop'は、Wordが文書の先頭で再び始まるのを防ぎます。 –

答えて

2

おかげで(私もLoop through Word document, starting from beginning of file at start of each loopに関連する情報を発見した可能性)、及び場合に、これはいつの日か、誰かを助けることができる:

  1. フォーマットにあなたを定義しますWordのマクロレコーダーのおかげです。

  2. 文書の冒頭に自分自身を配置

  3. wdFindStopをチェックwhileループを使用してください - それはまたVBA--内の文字列の配列を使用する方法を示します

...

Sub Macro2() 
    Dim mArray() As String 
    Dim i As Long, n As Long 
    Dim doc As Word.Document 
    Dim isFound As Boolean 
    isFound = True 
    i = 1 
    'For i = 1 To 40 
    Do While (isFound) 
     ReDim Preserve mArray(i) 
     With Selection.Find 
     .ClearFormatting 
     .Font.Color = wdColorBlue 
     .Text = "" 
     .Replacement.Text = "" 
     .Forward = True 
     .Wrap = wdFindStop 
     .Format = True 
     isFound = .Execute 
     End With 
     mArray(i) = Selection.Text 
     i = i + 1 
    Loop 
    'Next 
    n = i - 2 
    MsgBox n & " occurrences found." 

    ' 
    ' create a new document with the phrases found 

    Dim objWord As Application 
    Dim objDoc As Document 
    Dim objSelection As Selection 
    Set objWord = CreateObject("Word.Application") 
    Set objDoc = objWord.Documents.Add 
    objWord.Visible = True 
    Set objSelection = objWord.Selection 
    For i = 1 To n 'mArray's Size 
     objSelection.TypeText (mArray(i)) 
     objSelection.TypeParagraph 
    Next 
End Sub 

NB:私も持っている可能性があり選択を変更せずに見つける方法を説明するhttps://msdn.microsoft.com/en-us/library/office/aa211953%28v=office.11%29.aspxから大きな恩恵を受けました。

そしてここから:Find text only of style "Heading 1" (Range.Find to match style)

関連する問題