「文字列をハイライト表示するWordテンプレート」でWord 2007以降に対応した、クイックアクセスツールバーから文字列をハイライト表示するテンプレートを公開していますが、このテンプレートの機能を拡張したテンプレートを作成しました。
※ このテンプレートはマクロを使用していますが、全文書対象のテンプレート(Normal.dot、Normal.dotm)ファイルには変更を加えません。
※ Word 2003用の強調表示テンプレートはコチラ。
※ ハイライトがクリアされないテンプレートはコチラ。
文字列をハイライト表示するWordテンプレート(2)
このテンプレート(QATHitHighlight2.dotm)ファイルをWordのスタートアップフォルダにコピーして(スタートアップフォルダを開く際は「Wordのスタートアップフォルダを開く(VBS)」で紹介しているスクリプトが便利です)Wordを起動すると、クイックアクセスツールバーに文字列を入力するテキストボックスとハイライトクリア用のボタンが表示されます(テンプレートが不要になった場合はスタートアップフォルダからQATHitHighlight2.dotmファイルを削除してください)。
このテキストボックスにハイライト表示したい文字列を入力しEnterキーを押すと、文章内にある入力した文字列がハイライト表示されます。
「文字列をハイライト表示するWordテンプレート」で公開しているテンプレートと違い、スペース(半角・全角問わず)で区切った複数の文字列を色分けしてハイライト表示します(現状では10種類の配色に対応していますが、コードを変更することで色の組み合わせや色数を変更することが可能です)。
「文字列ハイライトクリア」ボタンをクリックすると、ハイライト表示がクリアされます。
※ ハイライト表示をしても文字色と文字の背景色が変更されるわけではありません。
※ クイックアクセスツールバーのショートカットキー(ALTキー + 数字キー)で操作をすると、効率良くハイライト表示できます。
Sponsored Links
このテンプレートで使用しているコードは下記の通りで、クイックアクセスツールバーへの登録は「クイックアクセスツールバーのボタンイメージを好きな画像にする(2)」で紹介した方法で行っています。
※ リボンXMLの編集方法については「Office Ribbon Editorの紹介」「SharpDevelopでリボンXMLを編集する」等のページを参照してください。
[標準モジュール]
Option Explicit
Public Sub editBox_onChange(control As IRibbonControl, text As String)
Dim HCol(9) As Variant
Dim TCol(9) As Variant
Dim s As String
Dim v As Variant
Dim i As Long, j As Long
If Len(Trim$(text)) < 1 Then Exit Sub
'-----------------------------------------
'※ 文字色と背景色
'※ 好みに応じて(色数含めて)自由に設定
'-----------------------------------------
'HighlightColor
HCol(0) = &HFF3300
HCol(1) = &H33FF
HCol(2) = &H6000
HCol(3) = &H3399FF
HCol(4) = &HFFFFCC
HCol(5) = &H666633
HCol(6) = &H33FFFF
HCol(7) = &HFF3399
HCol(8) = &H66FFCC
HCol(9) = &H6600CC
'TextColor
TCol(0) = &HFFFFFF
TCol(1) = &HFFFFFF
TCol(2) = &HFFFFFF
TCol(3) = &HFFFFFF
TCol(4) = &H660000
TCol(5) = &H33FFFF
TCol(6) = &H3300
TCol(7) = &HFFFFFF
TCol(8) = &H330033
TCol(9) = &H66FFFF
'-----------------------------------------
s = Replace(text, " ", " ") '全角スペースを半角スペースに置換
'連続スペースを1スペースに置換
With CreateObject("VBScript.RegExp")
.Pattern = " +"
.IgnoreCase = True
.Global = True
If .Test(s) Then s = .Replace(s, " ")
End With
ActiveDocument.Content.Find.ClearHitHighlight
v = Split(s, " ")
j = LBound(v) '初期化
For i = LBound(v) To UBound(v)
If j > 9 Then j = LBound(v) '色数を超えたら初期化
ExecuteHitHighlight v(i), HCol(j), TCol(j)
j = j + 1
Next
End Sub
Public Sub button_onAction(control As IRibbonControl)
ActiveDocument.Content.Find.ClearHitHighlight
End Sub
Private Sub ExecuteHitHighlight(ByVal SearchPhrase As String, Optional ByVal HighlightColor As Variant = wdColorYellow, Optional ByVal TextColor As Variant = wdColorRed)
'ハイライト処理実行
ActiveDocument.Content.Find.HitHighlight SearchPhrase, HighlightColor, TextColor
End Sub
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>
<tabs>
<tab id="tabHitHighlight" label="HitHighlight" visible="false">
<group id="grpHitHighlight" label="HitHighlight">
<editBox id="edtHitHighlight" sizeString="wwwwwwwwww" onChange="editBox_onChange" screentip="文字列ハイライト表示" supertip="ここに入力した文字列をハイライト表示します。" />
<button id="btnClearHitHighlight" label="ClearHitHighlight" size="normal" imageMso="Clear" onAction="button_onAction" screentip="文字列ハイライトクリア" supertip="文字列のハイライト表示をクリアします。" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>