先日の記事で「【コード】キーワードを蛍光ペンで着色するWordマクロ」を紹介いたしました。
私は、もう少し違う仕様で使っています。
改造のやり方の例としてご覧ください。
このマクロでできること
本文中のキーワードを蛍光ペンで着色します。
着色するときに、半角・全角の区別をします。
文字列が選択された状態でマクロを実行すると、インプットボックスにその文字列が自動的に入力されます。
まず、文字列を選択して、
マクロを実行すると、「ワードマクロ」がインプットボックスのデフォルト値として表示されます。
[OK]ボタンをクリックして蛍光ペンの着色終了。マクロの解説
13行目で選択されている文字列を取得します。
myDefault = Trim(Selection.Text)
Trim関数を使って、選択範囲の文字列の先頭と末尾の両方のスペースを削除します。
英単語を選択する場合、末尾に半角スペースが入りうるので(Ctrl + Shift + →または←で選択する場合)、半角スペースを削除するのです。
そうしないと、文末にあるキーワードを着色できませんので。
なお、条件分岐をしていますが、その理由は「選択されている文字列を文書内で検索するマクロ」に記載したとおりです。
上記記事内の条件分岐
If Selection.Start = Selection.End Then
と、
今回の記事の条件分岐
If Selection.Type = wdSelectionIP Then
は、同じ意味です。
16行目で、インプットボックスの設定をしています。
myKW = InputBox("文字列を入力してください。" & vbCr & _ "検索条件:半角と全角を区別する", "一括蛍光ペン", myDefault)
InputBox 関数には、いくつかの引数(設定できる項目)があります。
表示されるメッセージは、必ず指定します。
それ以外は、指定してもしなくてもいいです。
VBEのヘルプには、以下のように記載されています。
角括弧の引数は、指定しなくてもいい項目です。
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
promptはメッセージのことです。
今回は、タイトルとデフォルト項目を指定しています。
タイトル(title):”一括蛍光ペン”
デフォルト値(default):myDefault
42行目で、半角と全角を区別するよう、検索オプションを指定します。
検索オプションのTrueとFalseの設定を変更する場合、Falseの項目を前半に記載し、Trueの項目を後半に記載します。
理由はあるのですが、ひとまずこのルールだけ覚えておけば間違いはないです。
特に、Selectionオブジェクトでこの設定をする場合に、エラーの回避になりますから重要です。
マクロ
Sub キーワードを蛍光ペンで着色2() Dim myRange As Range Dim myDefault As String 'インプットボックスのデフォルトの文字列 Dim myKW As String '着色するキーワード Dim myColor As String 'キーワードが選択されていない場合 If Selection.Type = wdSelectionIP Then myDefault = "" Else 'キーワードが選択されている場合 myDefault = Trim(Selection.Text) End If myKW = InputBox("文字列を入力してください。" & vbCr & _ "検索条件:半角と全角を区別する", "一括蛍光ペン", myDefault) '現在の蛍光ペンの色を保存 myColor = Options.DefaultHighlightColorIndex '蛍光ペンの色を黄色に設定 Options.DefaultHighlightColorIndex = wdYellow 'myRange(オブジェクト変数)を設定 Set myRange = ActiveDocument.Range(0, 0) '一括置換を実行(「検索と置換」ダイアログボックスの設定) With myRange.Find .Text = myKW '検索する文字列 .Replacement.Text = "" '置換後の文字列(空欄でOK) .Replacement.Highlight = True '置換後の文字列の蛍光ペンをオン .Forward = True .Wrap = wdFindStop .Format = True '書式の設定をオン .MatchCase = False '大文字と小文字の区別する .MatchWholeWord = False '完全に一致する単語だけを検索する .MatchAllWordForms = False '英単語の異なる活用形を検索する .MatchSoundsLike = False 'あいまい検索(英) .MatchFuzzy = False 'あいまい検索(日) .MatchWildcards = False 'ワイルドカードを使用する .MatchByte = True '半角と全角を区別する .Execute Replace:=wdReplaceAll End With '蛍光ペンの色を元に戻す Options.DefaultHighlightColorIndex = myColor 'myRangeを解放 Set myRange = Nothing End Sub