PowerPoint 2007のドキュメントで、正規表現に一致する部分のフォントに色を付けたいと考えています。たとえば、黒い四角で始まって白い四角で終わる最短マッチ、"■[^□]□" に対して、赤いフォントを適用する、などです。
今のところできているコードをコメント欄に書き込みます。正規表現パターンにヒットすることまでは確認できましたが、ヒットした後、ヒットした場所にフォントの色を設定する方法がわかりません。
どのようなコードを書けばいいでしょうか。まったく新しいコードでこの問題を解決できる場合は、流用せずに新規のコードを教えてください。よろしくお願いします。ヒットした文字列を取り出して、通常の検索にかけて範囲選択してフォントの色を変えるのでしょうか・・・
Sub main()
Dim RegExp As Object '正規表現オブジェクト
Dim osld As Slide 'スライド
Dim oshp As Shape 'シェイプ
Dim strInput As String '検索対象文字列
Dim b_found As Boolean 'ヒット成否
'正規表現のオブジェクトを生成してパターンをセット
Set RegExp = CreateObject("vbscript.regexp")
With RegExp
.Global = True
.Pattern = "■[^□]□"
End With
'プレゼンテーションの各スライドをループ
For Each osld In ActivePresentation.Slides
'スライド内の各シェイプをループ
For Each oshp In osld.Shapes
'シェイプにテキストフレームがあり
If oshp.HasTextFrame Then
'さらにテキストが含まれている場合
If oshp.TextFrame.HasText Then
'そのテキストを検索対象文字列にセット
strInput = oshp.TextFrame.TextRange.Text
'検索対象文字列にパターンが含まれるかどうか
b_found = RegExp.test(strInput)
'含まれる場合
If b_found = True Then
'★ヒットした部分を範囲選択して色を付けたい!★
End If
End If
End If
Next oshp
Next osld
End Sub
コメント(3件)
If oshp.TextFrame.HasText Then
'そのテキストを検索対象文字列にセット
strInput = oshp.TextFrame.TextRange.Text
'検索対象文字列にパターンが含まれるかどうか
Set res = RegExp.Execute(strInput)
'含まれる場合
If res.Count > 0 Then
'★ヒットした部分を範囲選択して色を付けたい!★
For i = 0 To res.Count - 1
oshp.TextFrame.TextRange.Characters(InStr(strInput, res.Item(i)), Len(res.Item(i))).Font.Color = RGB(255, 0, 0)
Next
End If
End If
正規表現のパターンも
.Pattern = "■.*?□"
かな?
回答リクエストを出したのに締め切ってしまって申し訳ありません。
本当に遅くなりましたが、動作確認ができました!
帰省前にお返事ができて良かったです。
ささやかすぎますが、500ptを遅らせていただきます。
今後ともどうぞよろしくお願いします。
ポイント送信ありがとうございました。