2016-05-12 11 views
0

私の仕事では、スタイルのすべてのインスタンスを40語の文書(.doc)で検索する必要があります。テキストを取得したら、それをExcelシート(.xls)のセルに書きたいと思います。VBAはExcelのWord文書のすべてのスタイルを取得します

私が書いたコードでは、そのスタイルの最初のインスタンスを取得できますが、次のインスタンスを取得できません。無限ループに入り、なぜですか(それぞれのファイルに約10回の発生があります)。

私が間違っている場所を教えてください。それに Before running the macro ::私はそれから行きたい

After running the macro

ここでは私のコードです:

'================================================================== 
' Declarations 
'================================================================== 

Dim ObjWord As Object ' Word application object 

'================================================================== 
' Macro 
'================================================================== 

Public Sub Macro() 

Dim row As Integer 
row = 9 'first available row 

Set ObjWord = CreateObject("word.application") 

Worksheets("Sheet 2").Activate 

While (Cells(row, 2).Value <> "End of file list") 

    Set file = ObjWord.documents.Open(ThisWorkbook.path & ".\" & Cells(row, 1).Hyperlinks(1).Address) 


    Set currentRange = file.Range 

    currentRange.Find.ClearFormatting 
    currentRange.Find.Forward = True 
    currentRange.Find.Text = "" 
    currentRange.Find.Style = "MyStyle" 
    bFind = currentRange.Find.Execute 

    Do While bFind 'here is the endless loop 
     row = row + 1 
     StyleValue= currentRange.Text 'I get stuck with the first value :-(
     Rows(row).EntireRow.Insert 
     Cells(row, 2).Value = StyleValue 
     bFind = currentRange.Find.Execute 
    Loop 

    file.Close 

    row = row + 1 ' next File 
Wend 

ObjWord.Quit 
End Sub 
+0

完全な交換をポップアップ表示することができたテキストは、特定の文書構造に関してのどこにあるかにある程度依存します。特に重要なのは、テーブルセルが関与している場合です。私があなたのコードで見る別の潜在的な問題は、VBA(と私たち)がExcelオブジェクトを扱っているときとWordオブジェクトを使用しているときにはわからないことです。 'Range'は、例えば' rows'と 'columns'の両方で使用されます。この質問に明確に答えるためには、何らかの説明をする必要があります。 –

答えて

0

私はそれが私のために働くために多くの変更を加えなければならなかった、主に私はOption Explicitをオンにして、すべての変数を宣言します。

しかし、最初の検索でループしている場合は、問題が発生する可能性がありますが、次のものを見つけるために検索を通過しなければなりません。それでも解決しない場合は

Do While bFind 'here is the endless loop 
    row = row + 1 
    StyleValue= currentRange.Text 'I get stuck with the first value :-(
    Rows(row).EntireRow.Insert 
    Cells(row, 2).Value = StyleValue 

    currentRange.SetRange currentRange.End, currentRange.End 

    bFind = currentRange.Find.Execute 
Loop 

私はFind`がどのように反応するか `後で

+0

ありがとうございます!これは完全に動作します。私は前にそのようなことを試みましたが、間違っていたと思います。 – Pierre

0

私はそれがこれであることが必要だと思う:

Do While currentRange.Find.Found 
    currentRange.Find.Execute 
Loop 
+0

チャーリーありがとうございますが動作しませんが、問題はまだ同じです:( – Pierre

+0

問題はExcelで問題ないと思います - すべてのExcel行を削除してみてください。たとえば行(行).EntireRow.Insert。回避策: – Charlie

+0

これは少し変わっていません – Pierre

関連する問題