While ... Wendループがこのマクロで機能していない理由を理解できなくなりました。確かに、... Wendは私の強い訴訟ではないので、それがあります。しかし、とにかく私が達成しようとしていることは次のとおりです。Word VBA While Wendステートメントが機能しない
私は文書の最後に(それぞれ別の行に)単語やフレーズのリストを持っています。文書内の単語のそれぞれを検索し、黄色の強調表示を適用したいだからここに私が作成しようとしているプロセスです:
- 私はマクロを呼び出すときに私は最初の言葉です。
- 最初の文字を評価します。空行の場合は何もせずにマクロを終了します。単語やフレーズがある場合はそれを選択し、FRTextとして保存します。
- 行を削除し、ブックマークを作成し、F/Rを使用してテキストを見つけてハイライトします。
- リンスし、それ以上単語がなくなるまで繰り返す。
私はマクロを一時マクロで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は、ここで私が強調表示にしたいいくつかの単語と段落の例です。そしてもう少し言葉があります。そして私はこのマクロを動かすことができたらいいと思う。私はそれを修正しようと私の心と私の宗教を失っている!ここでは、強調したい単語を含む段落の例を示します。
ここにいくつかの単語があります。そして私はこのマクロを動かすことができたらいいと思う。私はそれを修正しようと私の心と私の宗教を失っている!ここでは、強調したい単語を含む段落の例を示します。そしてもう少し言葉があります。そして私はこのマクロを動かすことができたらいいと思う。私はそれを修正しようと私の心と私の宗教を失っている!ここで
例
段落
言葉
マクロ
「Find」を使用して、現在選択されているもの全体が正確なテキストである場合には、それが文書内のそれより前であっても、次のオカレンスを先読みします。 - https://stackoverflow.com/a/44105332/5757159 – ThunderFrame
こんにちはThunderFrame - ご回答ありがとうございます。私はあなたが何を言っているのか分かりません。たとえば、手動でテキストを選択してから検索/置換または検索を呼び出すと、そのテキスト内でのみ検索され、ドキュメントの先頭からではなく下から検索されます。 GRRR - 続けるEnter!とにかく、私はマクロの始めを私のやり方と同じように設定しています。つまり、テキスト行を選択し、変数として保存してから、削除することで効果的に選択を解除します。その後、F/Rは妨害されません。 違いはありませんか? – HappyNanaMO
ThunderFrame、問題があると思っている場合は、文書の先頭に移動して検索を開始する声明を追加しても大丈夫です。私はそれを試してみましょう。 – HappyNanaMO