カスタム検索
リボン関連

文字列をハイライト表示するWordテンプレート(2)

文字列をハイライト表示する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]
<?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>