2017-12-17 15 views
1

While ... Wendループがこのマクロで機能していない理由を理解できなくなりました。確かに、... Wendは私の強い訴訟ではないので、それがあります。しかし、とにかく私が達成しようとしていることは次のとおりです。Word VBA While Wendステートメントが機能しない

私は文書の最後に(それぞれ別の行に)単語やフレーズのリストを持っています。文書内の単語のそれぞれを検索し、黄色の強調表示を適用したいだからここに私が作成しようとしているプロセスです:

  1. 私はマクロを呼び出すときに私は最初の言葉です。
  2. 最初の文字を評価します。空行の場合は何もせずにマクロを終了します。単語やフレーズがある場合はそれを選択し、FRTextとして保存します。
  3. 行を削除し、ブックマークを作成し、F/Rを使用してテキストを見つけてハイライトします。
  4. リンスし、それ以上単語がなくなるまで繰り返す。

私はマクロを一時マクロで1ステップずつ増やしています。また、While ... Wendステートメントを使用して、より簡単な「中間」ステップで作業することもできます(例: F/R操作の代わりに、単語と空の行をテストし、単語の場合はテキストを太字にし、空白の場合は終了する)、それらはすべてうまくいきました。

しかし、私はそれをすべて「リアルマクロ」にまとめてみると、毎回同じ問題が発生します。コンパイルはうまくいきますが、実行するとデバッグエラーが発生します。デバッグをクリックすると、マクロが3つまたは4つの単語(正しく)で実行され、デバッガはマク​​ロ内の異なるランダムな場所で停止し、韻や理由はなく、何が間違っているかについてのヒントは表示されません。

また、リストの最後の単語にマクロを実行すると、正常に動作します。また、ドキュメントの空の行にカーソルを置くと、正しく動作します(何もしないで、ちょうどそうする必要があります)。

私は困惑しています。私は、While ... Wendループについての例と情報を探して、説明を見つけることができるかどうかを調べました。私も私の本を探しました。しかし、私が試したことは何も動作していないようです。誰かがこれを見て、私が間違っていることをすぐに見ることができるという奇跡を祈っています!

マクロは、以下のとおりです。また、誰かがそれをテストする傾向があると思われる場合、コピーするサンプルテキストもあります。前もって感謝します!

MACRO TESTING FOR

カレン


Sub FindAndHighlightList() 

     Dim FRText As String 
     Dim iCount As Integer 

    Application.ScreenUpdating = False 


    'Begin with cursor on first word in "find list." 
    'Repeat the following action until no more words are found in the list 
    'iCount is precautionary measure in case macro gets hung in the loop 

    While Not Selection.Characters(1) = Chr(13) And iCount < 1000 
       iCount = iCount + 1 

    'Select the current line of text, minus the paragraph mark; store it as FRText; then delete it 

     Selection.HomeKey Unit:=wdLine 
     Selection.EndKey Unit:=wdLine, Extend:=wdExtend 
     Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend 

     FRText = Selection.Text 

     Selection.EndKey Unit:=wdLine, Extend:=wdExtend 
     Selection.Delete Unit:=wdCharacter, Count:=1 

    'Create a temporary bookmark 

     With ActiveDocument.Bookmarks 
      .Add Range:=Selection.Range, Name:="TempX" 
      .DefaultSorting = wdSortByName 
      .ShowHidden = True 
     End With 

    'Find the selected text and replace add yellow highlight 

     Selection.Find.ClearFormatting 
     Selection.Find.Replacement.ClearFormatting 
     Options.DefaultHighlightColorIndex = wdYellow 
     Selection.Find.Replacement.Highlight = True 
     With Selection.Find 
      .Text = FRText 
      .Replacement.Text = FRText 
      .Forward = True 
      .Wrap = wdFindContinue 
      .Format = True 
      .MatchCase = True 
      .MatchWholeWord = False 
      .MatchWildcards = False 
      .MatchSoundsLike = False 
      .MatchAllWordForms = False 
     End With 
     Selection.Find.Execute Replace:=wdReplaceAll 

    'Go to TempX bookmark location 

     Selection.GoTo What:=wdGoToBookmark, Name:="TempX" 

    Wend 

    If Selection.Characters(1) = Chr(13) Then Exit Sub 

     Application.ScreenUpdating = True 

    End Sub 

SAMPLE TEXTは、ここで私が強調表示にしたいいくつかの単語と段落の例です。そしてもう少し言葉があります。そして私はこのマクロを動かすことができたらいいと思う。私はそれを修正しようと私の心と私の宗教を失っている!ここでは、強調したい単語を含む段落の例を示します。

ここにいくつかの単語があります。そして私はこのマクロを動かすことができたらいいと思う。私はそれを修正しようと私の心と私の宗教を失っている!ここでは、強調したい単語を含む段落の例を示します。そしてもう少し言葉があります。そして私はこのマクロを動かすことができたらいいと思う。私はそれを修正しようと私の心と私の宗教を失っている!ここで



段落
言葉
マクロ

ThunderFrameは、次の応答で私の質問に答えた
+1

「Find」を使用して、現在選択されているもの全体が正確なテキストである場合には、それが文書内のそれより前であっても、次のオカレンスを先読みします。 - https://stackoverflow.com/a/44105332/5757159 – ThunderFrame

+0

こんにちはThunderFrame - ご回答ありがとうございます。私はあなたが何を言っているのか分かりません。たとえば、手動でテキストを選択してから検索/置換または検索を呼び出すと、そのテキスト内でのみ検索され、ドキュメントの先頭からではなく下から検索されます。 GRRR - 続けるEnter!とにかく、私はマクロの始めを私のやり方と同じように設定しています。つまり、テキスト行を選択し、変数として保存してから、削除することで効果的に選択を解除します。その後、F/Rは妨害されません。 違いはありませんか? – HappyNanaMO

+0

ThunderFrame、問題があると思っている場合は、文書の先頭に移動して検索を開始する声明を追加しても大丈夫です。私はそれを試してみましょう。 – HappyNanaMO

答えて

1

:あなたが検索使用していることを認識しない場合がありますように

ですね、全体の現在あなたが探している正確なテキストです。たとえそれがドキュメントの前のものであっても、次のオカレンスを先読みします。

それがうまくいった!

私は彼のコメントをアップヴォーグし、問題を解決済みとしてマークしていないので、彼の答えをここに掲載しています。だからうまくいけば、これは私にそれをする選択肢を与える。

ありがとうございます、ThunderFrame!

関連する問題