質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

Q&A

1回答

1021閲覧

WORD のVBA、With Selection.Findで二回目の実行がうまく動きません。

Suetsugu8

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

0グッド

0クリップ

投稿2022/08/13 10:36

ドキュメント内の<>で囲まれた文字すべてを白で非表示にするマクロを作りました。最初の実行では、<>でかこまれた文字は白色に変換され見えなくなるのですが、それらの文字をまた黒にもどして見えるようにし、再度このマクロを実行するとうまく動かず、白色に変換されません。(エラーメッセージは出ません)ただし、いったんファイルをクローズして改めてオープンしたドキュメントでマクロを実行するとまたできるようになります。(つまりオープンしたままのドキュメントでマクロを実行しても二回目がうまく動きません)

オープンしたままで2回目以降もマクロがうまく動くようにするにはどのようにしたらよいでしょうか?

Sub LOAD()

'<>は特殊文字なので通常の文字として扱うために前に\マーク

With Selection.Find
.Text = "<*>"
.Wrap = wdFindContinue
.MatchFuzzy = False
.MatchWildcards = True

Do While .Execute
Selection.Font.Color = wdColorWhite
Selection.Range.HighlightColorIndex = wdWhite

Loop

End With

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Suetsugu8

2022/08/13 10:38

マクロの二行目は以下に訂正します。 .Text = "¥<*¥>" 
guest

回答1

0

Selection.Find はカーソル位置以降を検索しますので、
処理終了後に文頭にカーソル位置を移動させておけばどうでしょう。

文書の先頭にカーソルを移動するWordマクロ:ワードマクロ・Word VBAの使い方/ブックマーク

追記

下記の '追加 の行を挿入したらどうでしょう。

vba

1Sub LOAD() 2 3 With Selection.Find 4 .ClearFormatting '追加 5 .Text = "\<*\>" 6 .Wrap = wdFindContinue 7 .MatchFuzzy = False 8 .MatchWildcards = True 9 10 Do While .Execute 11 Selection.Font.Color = wdColorWhite 12 Selection.Range.HighlightColorIndex = wdWhite 13 Loop 14 15 End With 16 ActiveDocument.Bookmarks("\StartOfDoc").Select '追加 17 18End Sub

投稿2022/08/13 22:40

編集2022/08/14 12:19
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Suetsugu8

2022/08/14 06:04

ご返信ありがとうございます。それが、カーソル位置を先頭にして二回目のマクロを実行してもだめなんです。 かといってエラーメッセージがでるでもありません。カーソル位置を先頭にしてステップインで一つ一つ実行してみるとなぜか二回目の実行では検索文字列である"¥<*¥>"が検索対象としてヒットしないんです。
hatena19

2022/08/14 07:15

Wordで文書を作成して、 質問のコードを実行した後、 文書を全選択して、文字色を黒にし、 再度、実行したら正常に動作しました。 つまり、こちらでは質問の症状が再現しません。 「文字をまた黒にもどして見えるようにし」は、具体的にどのような操作をしましたか。 新規に文書を作成しても再現しますか。
Suetsugu8

2022/08/14 11:38

すみません。たしかに単純に白文字に変換された文字をWORDのメニューから黒文字に変換しなおすだけなら2回目のマクロの実行できちんと動作することが確認できました。(私の確認不足でした)問題はここではなく黒文字にする処理を以下のマクロで処理しているところにあるようです。 以下のマクロでやりたいことは、簡単な暗記シートのようなもの目指したマクロで、これで<>をすべて黒文字にしたあと続けてまた当初のマクロを実行するとうまく動かないというものです。 0.Sub LOAD で<>で囲った文字を白にして文字を見えなくする。 1.Sub Startで<>内の白文字部分を検索選択 2.Sub AnswerAgain で1の選択文字部分が白なら黒に変換して文字表示。 3.2で表示した文字を覚えていればSub Doneを実行して次の<>の白文字部分を検索  (ただし5回に1回はドキュメントの最初から検索しなおして直近で覚えていなかった<>部分を再チェック。) 4.2で表示した文字を覚えていなければ再度Sub AnswerAgain を実行しCall Againで選択文字部分を黒から白に戻して次の<>の白文字部分を検索  (ただし5回に1回はドキュメントの最初から検索しなおして直近で覚えていなかった<>部分を再チェック。) Option Explicit Dim i As Integer Sub Start() Selection.Find.ClearFormatting Selection.Find.Highlight = True Selection.Find.Font.Color = wdColorWhite With Selection.Find .Text = "\<*\>" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute End Sub Sub AnswerAgain() If Selection.Font.Color = wdColorWhite Then Selection.Font.Color = wdColorBlack '回答をおぼえていなければ、もう一度でAnswerAgainを実行して以下AGAINヘ Else Call Again End If End Sub Sub Again() Selection.Font.Color = wdColorWhite 'もし5クリック目つまりi=5の倍数であればカーソルを文章の最初にもどしてから検索 i = i + 1 If i Mod 5 = 0 Then ActiveDocument.Bookmarks("\StartOfDoc").Select End If Call Start End Sub Sub Done() 'もし5クリック目つまり i=5の倍数であれば カーソルを文章の最初にもどしてから検索 i = i + 1 If i Mod 5 = 0 Then ActiveDocument.Bookmarks("\StartOfDoc").Select End If Call Start End Sub
hatena19

2022/08/14 12:20

回答に追記しましたので、それを試してみてください。
Suetsugu8

2022/08/14 13:31

ありがとうございます!ご教授いただいた通り .ClearFormattingを追記したら解決いたしました。ご丁寧に教えていただき深謝いたします。
hatena19

2022/08/15 03:26

解決したのなら、解決済みにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問