「みんな教えて! 選手権!!」開催のお知らせ

Wordファイル内に含まれるすべての図形の枠や塗りつぶしの特定の色を別の色に
一括置換するマクロはできないものでしょうか?よろしくお願いいたします。

質問者からの補足コメント

  • 例えばXMLのコードを直接表示させて、色の値を一括置換するような方法でも構いません。

      補足日時:2019/03/14 23:01

A 回答 (2件)

グループ化内の特定の色の図形も処理したいのですか?


すべてのグループ化を解除すれば簡単なのですが、私はマクロが
得意なほうではないので、うまく処理できているか不安ですが。
一応、こちら↓のようなもので処理できそうです。

Sub グループ化した図形を含む色のを変更()
 Dim shp As Shape
 Dim n, i As Integer

‘ 単独の図形
 For Each shp In ActiveDocument.Shapes
‘ 塗りつぶしの色
  If shp.Fill.ForeColor = RGB(255, 255, 255) Then
   shp.Fill.ForeColor = RGB(0, 0, 0)
  End If
‘ 線の色
  If shp.Line.ForeColor = RGB(0, 0, 255) Then
   shp.Line.ForeColor = RGB(255, 0, 0)
  End If

‘ グループ化した図形
  If shp.Type = msoGroup Then
  n = shp.GroupItems.Count
  For i = 1 To n
‘ グループ化した図形内の塗りつぶしの色
    If shp.GroupItems(i).Fill.ForeColor = RGB(255, 255, 255) Then
    shp.GroupItems(i).Fill.ForeColor = RGB(0, 0, 0)
   End If
‘ グループ化した図形内の線の色
   If shp.GroupItems(i).Line.ForeColor = RGB(0, 0, 255) Then
    shp.GroupItems(i).Line.ForeColor = RGB(255, 0, 0)
   End If
  Next i
  End If

 Next shp
End Sub

もっとスマートな書き方があると思います。
私としては、これらを調べるだけでも大変でした。
    • good
    • 1
この回答へのお礼

ありがとうございます!できました!
感謝してもしきれないほどです。
ただで教えてもらい申し訳ない限りです。

お礼日時:2019/03/18 10:25

例えば、こちら↓のようなもので処理します。



Sub アクティブ文書内の図形の色を変更する()
 Dim shp As Shape
 For Each shp In ActiveDocument.Shapes
  If shp.Line.ForeColor = RGB(0, 0, 255) Then
   shp.Line.ForeColor = RGB(255, 0, 0)
  End If
  If shp.Fill.ForeColor = RGB(255, 255, 255) Then
   shp.Fill.ForeColor = RGB(0, 0, 0)
  End If
 Next shp
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。図形を挿入して実験するとできました。
しかし変更したいものはすべてグループ化されており、
このコードではグループ化された1つ1つの図形には
適用されませんでした。解決策はないものでしょうか?

お礼日時:2019/03/18 00:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報