サンプルコードでできること
スマートアートの文字列を置換します。
コードの説明
TextRange2オブジェクトのReplaceメソッドを用いて置換します。
Set tempRng = rng.Replace(mae, ato, MatchCase:=msoTrue)
「MatchCase:=msoTrue」で大文字と区別を追加しています。
英文など単語全体で検索するときは、「Wholewords:=msoTrue」を追加します。
パラメーターを見る限り、Range.FIndやSelection.Findと違い、ワイルド検索には対応していないようです。
mae = "■" '検索キーワード ato = "□" '置換キーワード
必要に応じてキーワードを変更します。
Set tempRng = rng.Replace(mae, ato, tempRng.Start _ + tempRng.Length - 1, MatchCase:=msoTrue)
最初の置換が終わったあとのコードです。
「tempRng.Start + tempRng.Length - 1」は、名前付き引数を使うと「After: tempRng.Start + tempRng.Length - 1」です。
置換した文字のあとの範囲で次の置換を行うという意味です。
検索と置換のキーワードの文字数が違うとうまくいかなくて、このコードの記述に時間がかかりました。
検証が足りないので、場合によってはうまくいかないかもしれません。
Sub SmartArtReplace() '行内のスマートアートの文字列を置換します。 Dim shp As Shape, gShp As Shape, inlShp As InlineShape Dim satNode As SmartArtNode Dim rng As TextRange2, tempRng As TextRange2 Dim mae As String, ato As String mae = "Word" '検索キーワード ato = "ワード" '置換キーワード For Each inlShp In ActiveDocument.InlineShapes If inlShp.Type = wdInlineShapeSmartArt Then For Each satNode In inlShp.SmartArt.AllNodes Set rng = satNode.TextFrame2.TextRange Set tempRng = rng.Replace(mae, ato, MatchCase:=msoTrue) Do While Not (tempRng Is Nothing) Set tempRng = rng.Replace(mae, ato, tempRng.Start _ + tempRng.Length - 1, MatchCase:=msoTrue) Loop Next End If Next End Sub