![見出し画像](https://assets.st-note.com/production/uploads/images/156142003/rectangle_large_type_2_46e52992c9df1dbd9f5b579f3794dc1c.png?width=1200)
Photo by
ibaraki_nakai
WordVBAで文書中に特定のフォント色の使用状況をチェックする
WordVBAで、何かの処理を実行する前に、特定のフォントカラー(例えば赤色)が使われているかチェックしたい場合があります。
(例えば、その処理で特定の条件に該当する場合に、同じフォントカラーにする処理をする場合は、元々使っていた色と重複すると、処理実行によってそのフォントカラーになった部分か区別がつかないと困りますよね。)
下記のコードで、文書中に特定のフォントカラーが使われているかチェックを行うことができます。
Sub sb赤色のフォントが使われているかチェックする()
Dim myRange
Dim foundFlag As Boolean
foundFlag = False ' フラグを初期化
' アクティブドキュメントの全範囲をループ
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = ""
.Forward = True
.Font.Color = wdColorRed
.Wrap = wdFindStop
.Execute
If .Found = True Then
foundFlag = True
End If
End With
' 赤色フォントが見つかった場合にメッセージを表示
If foundFlag Then
MsgBox "赤色のフォントが使用されています。", vbInformation
Else
MsgBox "赤色のフォントは使用されていません。", vbInformation
End If
End Sub
別のメイン処理で上記を行いたい場合には、Subプロシージャではなく、Functionでやるとよいと思います。
Function zf赤色のフォントが使われているか(a_doc As Document) As Boolean
'Booleanの初期値はFalseのため、見つからなければFalseを返す
Dim myRange
'アクティブドキュメントの全範囲を検索
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = ""
.Forward = True
.Font.Color = wdColorRed
.Wrap = wdFindStop
.Execute
If .Found = True Then
zf赤色のフォントが使われているか = True
End If
End With
End Function
その上で、使用しているフォントカラーを一時的に別の色に変更したいという場合は、下記をご利用ください。
なお、データ型をWdColor型にしてフォントカラーを指定していますが、データ型をLong型へ変更してRGBで指定することも可能です。
Sub sbテキストカラーを赤からスカイブルーへ変更()
Call sbテキストカラー変更(ActiveDocument, wdColorRed, wdColorSkyBlue)
Dim myMsg As String 'メッセージボックス用変数
myMsg = "処理が終了しました。"
MsgBox myMsg, , "処理結果通知"
End Sub
Sub sbテキストカラー変更(ByVal a_doc As Document, ByRef a_beforeColor As WdColor, ByRef a_afterColor As WdColor)
Dim myRange
Set myRange = a_doc.Content
Call sbSetting(True) '画面更新OFF等の初期設定ON
With myRange
.Find.Font.Color = a_beforeColor
.Find.Replacement.Font.Color = a_afterColor
.Find.Execute Replace:=2
End With
' 終了処理
Set myRange = Nothing
Call sbSetting(False) '画面更新OFF等の初期設定OFF
End Sub
Public Sub sbSetting(flg As Boolean)
If flg Then
Application.ScreenUpdating = False '画面更新の停止
Application.DisplayAlerts = False '画面警告の表示の停止
Else
Application.ScreenUpdating = True '画面更新の開始
Application.DisplayAlerts = True '画面警告の表示の開始
End If
End Sub
いいなと思ったら応援しよう!
![ななし](https://d2l930y2yx77uc.cloudfront.net/assets/default/default_profile_4-e3b57528da29acad20d5a2db33268c87f1d39015448757ddf346d60fb5861e49.png?width=600&crop=1:1,smart)