0

Word ドキュメントを 1 行ずつ検索する vba マクロを作成し、ドキュメント内の特定の名前を見つけようとしています。ループは、ドキュメントの最後に達したときを除いて正常に機能し、最初から続けて最初からやり直します。コードは次のとおりです。

Application.ScreenUpdating = False
 Dim i As Integer, Rng As Range
 With ActiveDocument.Range
   With .Find
     .ClearFormatting
     .Replacement.ClearFormatting
     .Text = "?"
     .Replacement.Text = ""
     .Forward = True
     .Wrap = wdFindStop
     .Format = False
     .MatchWildcards = True
     .Execute
   End With
   Do While .Find.found
     i = i + 1
     Set Rng = .Duplicate
     Set Rng = Rng.GoTo(What:=wdGoToBookmark, Name:="\line")
     MsgBox "Line " & i & vbTab & Rng.Text
     If Rng.Bookmarks.Exists("\EndOfDoc") Then Exit Do
     .start = Rng.End
     .Collapse wdCollapseEnd
     .Find.Execute
   Loop
 End With
 Set Rng = Nothing
 Application.ScreenUpdating = True

このコードも試しました:

Dim appWD As Word.Application
 Dim docWD As Word.Document
 Dim rngWD As Word.Range
 Dim strDoc As String
 Dim intVal As Integer
 Dim strLine As String
 Dim bolEOF As Boolean

bolEOF = False

' Set strDoc here to include the full
 ' file path and file name

On Error Resume Next
 Set appWD = GetObject(, "Word.Application")
 If Err.Number <> 0 Then
 Set appWD = CreateObject("Word.Application")
 End If
 Err.Clear
 On Error GoTo 0

strDoc = "c:\KenGraves\Project2\output\master.doc"
Set docWD = appWD.Documents.Open(strDoc)
 appWD.Visible = True

docWD.Characters(1).Select

Do
 appWD.Selection.MoveEnd Unit:=wdLine, Count:=1
 strLine = appWD.Selection.Text
 Debug.Print strLine
 intVal = LineContainsDescendant(strLine)
 If intVal = 1 Then
    MsgBox strLine
 End If
 appWD.Selection.Collapse wdCollapseEnd

If appWD.Selection.Bookmarks.Exists("\EndOfDoc") Then bolEOF = True
 Loop Until bolEOF = True

どちらもブックマーク ("\EndOfDoc") を認識していないようです。どちらが機能するかは問題ではありません。ドキュメントにこのブックマークが含まれていない可能性はありますか?

4

2 に答える 2

0

それほどエレガントではありませんが、最初の手順の 1 行を変更すると、適切なタイミングで停止するように見えます。ブックマークを参照したい場合は、実際にドキュメントにブックマークを挿入する必要があると思います。それらは自動的に生成されません。

     If i >= ActiveDocument.BuiltInProperties("NUMBER OF LINES") Then Exit Do

乾杯、LC

于 2013-06-14T02:16:31.257 に答える
0

ドキュメントが破損していない限り、すべての Word ドキュメントに\EndOfDocブックマークが必要です。を使用して簡単に確認できますActiveDocument.Range.Bookmarks("\EndOfDoc").Exists。そうでない場合は、Word のバージョンに関する詳細を提供する必要があります。また、可能であれば、Dropbox などを介してサンプル ドキュメントを提供する必要があります。

Word 文書の最初にループしている理由がわかりません。コードを実行すると正常に動作します。ただし、ドキュメントの最後に脚注を配置すると、無限ループに陥ります。ドキュメントによっては、コードがドキュメントのセットアップを処理できないという、このような追加の状況が発生する可能性があります。

ドキュメントの最後を確認する方法を少し変更して、コードをもう少し堅牢にすることをお勧めします。ブックマーク「\EndOfDoc」は引き続き使用しますが、現在の検索範囲に対して範囲の制限を確認します。

したがって、コードの先頭で範囲変数を宣言し、それをドキュメントの最後の範囲に設定します。

Dim rEnd As Range
Set rEnd = ActiveDocument.Bookmarks("\EndOfDoc").Range

そして、次の行の代わりに、ループ内で:

If Rng.Bookmarks.Exists("\EndOfDoc") Then Exit Do

次の行を使用します。

If Rng.End >= rEnd.End Then Exit Do
于 2013-06-14T03:42:17.793 に答える