【Word VBA/マクロ】スマートアート内の置換
追記:2023年12月4日マクロの記事は下記のサイトで書くことにしました。Word VBA/マクロ 備忘録本文やオートシェイプの置換は、「Range.Find.Replacement」を使用します。スマートアートでは、RangeのメンバーのFindは使用できませんでした。選択する方法(Selection.Find)もうまくいかず…。TestRange2のメンバーの「Find」は使えそうですが、戻り値が「TextRange2」なんですよね。他のFindと全然違うので、難しくて分かりませんでした。やむを得ずInStrで置換することにしました。スマートアートは初期設定では行内なので、前面などShape型には対応しておりません。Sub スマートアート置換() Dim shp As Shape, gShp As Shape, inlShp As InlineShape, satNode As SmartArtNode Dim rng As TextRange2, satRng As TextRange2 Dim mae As String, ato As String, txt As String Dim cntMae As Long, cntAto As Long, nagasa As Long, c As Long mae = "■■" '検索キーワード ato = "□□" '置換キーワード nagasa = Len(mae) For Each inlShp In ActiveDocument.InlineShapes If inlShp.Type = wdInlineShapeSmartArt Then For Each satNode In inlShp.SmartArt.AllNodes Set rng = satNode.TextFrame2.TextRange txt = rng.Text cntMae = 1 Do While InStr(cntMae, txt, mae) > 0 txt = rng.Text cntMae = InStr(txt, mae) If cntMae = 0 Then GoTo Continue rng.Characters(cntMae, nagasa).Text = ato LoopContinue: Next End If NextEnd Sub