プロが教える店舗&オフィスのセキュリティ対策術

昨日TTakさんから下記のマクロを御教授いただいて助かっているのですが、特定のShapesを除外して下記を実行する方法があれば教えていただけないでしょうか。

Private Sub CommandButton1_Click()
Dim myf As String
myf = "ここに画像ファイルまでのパスとファイル名を入れる"
With ActiveDocument
For i = 1 To .Shapes.Count
.Shapes(i).Fill.UserPicture myf
Next i
End With
End Sub

A 回答 (1件)

s-holmesさん、またまたこんにちは。


前回提示したコードは、任意の図形の因数 "Index" を変数にして、ドキュメント内のすべての図形に画像を入れるというものです。したがって、特定の図形だけはずすという場合は、(もうお解りですね)IF 文で、特定の Index 番号の時だけ "Shapes(i).Fill.UserPicture myf" を実行しないようにします。
しかし、一つ問題あります。それは、特定の図形の Index が何番なのかを探す方法です。
基本的には図形を書いた順番に割り振られていると思うのですが、当該図形をアクティブにした後、イミデイトウインドウに"?Selection.Index"と入れて[Enter]すると、Index値を返してくれます。しかし、この方法はEXCEL-VBAでは可能ですが、WORD-VBAではできません。苦肉の策として、"Name"が一致するか否かで一々判断させることにしました。
#この部分はもっといい方法があるかもしれません。

1, VBエディタを起動し、イミデイトウインドウも表示しておきます。
2, Wordドキュメントに戻って、画像を入れたくない図形を選択してアクティブにします。
3, 再度VBエディタに戻って、イミデイトウインドウに"?ActiveDocument.Shapes(1).Name=selection.ShapeRange.Name"と記入し、[Enter]します。
4, 下の段に"TRUE"と出るまで、Shapes(1),Shapes(2),Shapes(3)....とindex値を変化させます。
5, "TRUE"が出ると、選択された図形のindexが判りますので、下記のようにコードを分岐します。

Private Sub CommandButton1_Click()
Dim myf As String, i As Integer, x1 As Integer
myf = "ここに画像ファイルまでのパスとファイル名を入れる"
x1 = 画像を入れたくない図形のindex値
With ActiveDocument
For i = 1 To .Shapes.Count
If i = x1 Then Exit For Else .Shapes(i).Fill.UserPicture myf
Next i
End With
End Sub

index値を追加する場合はx2,x3,.....として、If文の条件分岐を追加してください。
Word2000にて動作確認済みです。
    • good
    • 0
この回答へのお礼

TTakさん、またまたありがとうございます。「イミデイトウインドウ」とはなんぞや、「イミ」がわからない、と一瞬硬直しましたが、なんとかたどりつきました。そして、目的の動作ができました。
これぞ裏ワザって感じなのかわかりませんが、とても勉強になりました。

#これで、多分自分の今回やりたいことはクリアできたと思っています。お手数をおかけしました。

お礼日時:2001/04/19 13:48

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