【WordVBA】相互参照に着色
Wordで就業規則を作成しているときに、相互参照の設定をしたかどうかを確認するために、蛍光ペンで着色しています。これを自動化するマクロを作りましたので公開します。
相互参照とは
第○条という条文を参照する個所にはWordの相互参照の機能を使っています。
相互参照を使うためには、アウトラインレベルを全段落に設定しないといけないので、手間ではあるのですが、一度設定してしまえば後が楽になるので、私は重宝に使っています。
相互参照は、挿入→リンクのところにあります。
相互参照の何がよいかというと、次のようなケース。
この状態で第1条と第2条の間に条文が追加になったとします。
この場合、第4条(もとの第3条)にある「第2条の正社員は」の部分を手動で直さないといけないのかというと、その必要はありません。
いったん印刷画面にして戻すと、参照設定の値が更新されます。
就業規則のチェックをしていると、参照先の設定ミスは、よく見つかるミスです。おそらく改正のときの修正もれです。
これをシステマチックに防ぐために、相互参照はお勧めです。
相互参照の欠点
相互参照は見た目がただの文章なので、相互参照を設定してあるかどうか分かりづらいという欠点があります。
そこで、私は検索と置換で黄色いマーカーをしておくことが多いです。
検索と置換で一気に蛍光ペンを引く方法は、Webの海とかChatGPTとかで調べてください。ここでは紹介しません(ありふれたテクニックだと思うので)。
これを何度も何度も就業規則の修正作業の中でやっていると、めんどうになってくるので、私はマクロ化しています。
コード
コードを提示しておきます。
Option Explicit
Private myRibbon As Office.IRibbonUI
Private flg As Boolean
Public Sub myRbn_onLoad(ribbon As IRibbonUI)
Set myRibbon = ribbon
flg = True
myRibbon.Invalidate ' リボンの表示を更新する
End Sub
Public Sub myTgl_onAction(control As IRibbonControl, pressed As Boolean)
flg = pressed
SetHighlight
End Sub
Public Sub myTgl_getPressed(control As IRibbonControl, ByRef returnedVal)
returnedVal = flg
End Sub
'
'検索して置換で蛍光ペンを引く
'
Private Sub SetHighlight()
'画面制御
Application.ScreenUpdating = False
'フィールドコードを表示
ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
'蛍光ペンの色を選択しておく
If flg Then
Options.DefaultHighlightColorIndex = wdYellow '黄色
Else
Options.DefaultHighlightColorIndex = wdNoHighlight '無色
End If
Dim Rng As Range
'変換範囲
If Selection.Start = Selection.End Then
Set Rng = ActiveDocument.Range '範囲選択しなければ文書全体
Else
Set Rng = Selection.Range '選択された範囲内のみ
End If
'検索して置換(置換後の文字列は蛍光ペンが引かれる)
Rng.Find.ClearFormatting
Rng.Find.Replacement.ClearFormatting
Rng.Find.Replacement.Highlight = True
With Rng.Find
.Text = "^d Ref"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = False
End With
Rng.Find.Execute Replace:=wdReplaceAll
'後始末
Set Rng = Nothing
'フィールドコードを非表示
ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes
'画面制御復帰
Application.ScreenUpdating = True
End Sub
カスタムリボンを作ってボタンを設けてあるので、上記のコードにはリボン制御のコードも含まれます。
ボタンはトグルボタンを使っていて、トグルのオンオフは内部変数flgに転記されます。flgの値を見て、黄色い蛍光ペンを引くか、それとも無色にするか(蛍光ペンの色をとるか)判断して制御しています。
作ったもの
今回つくったものを置いておきます。アドインとして使えるテンプレートとして作りましたので、使うときは開発タブ→文書テンプレートで読み込んでください。
うまく読むこむことができれば次のようにリボンにボタンができますので、
このボタンを押してマクロを起動してください。
作ったものは、こちら↓。ZIPになっていますので、解凍してから使ってください。
https://kn-sharoushi.com/wp-content/uploads/2023/08/Highlight.zip
お使いになるのは自由ですが、著作権は放棄していません。
ニーズがあればリボンのXMLも提示しようかなと思いますが、はたしてニーズがあるのでしょうか・・・・?
-
前の記事
期日延期 2023.08.25
-
次の記事
【customUI.xml】リボンのカスタマイズでエラー 2023.08.29