昨日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

このQ&Aに関連する最新のQ&A

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に関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QWith Range("A1")を入力後、改行するとEnd Withが自動入力されるようにしたい

Sub sample()と入力後、改行するとEnd Subが自動入力されます。

それと同じようにWith Range("A1")を入力後、改行するとEnd Withが
自動入力されるようにするにはどうすればよいのでしょうか?

使用OS:Windows XP
使用ソフト:Microsoft Excel 2003

ご存知の方がおられましたらご回答をよろしくお願いします。

Aベストアンサー

標準機能では不可能です。

シェアウェアですが、VBE アドインがあります。

VB6/Office2000 となっていますが、OfficeXP と Office2007 でも
動作しました。試用してみて気にいったら、購入してみては?

 # Offce2003 は未確認ですが、おそらく大丈夫

VB/VBEの補助ツール VB(E) Assist
http://www.vector.co.jp/soft/cmt/win95/prog/se328395.html

URL を失念しましたが、海外サイトでも同類のアドインを見かけた
ことがあります。

QPublicで宣言した時は「End Sub」でマクロが終わっても変数は保存されるのですか?

Public test As Boolean
Sub マクロ1()
test = True
End Sub

をステップインでデバッグしながら実行する時に
一番最初はtestにカーソルをあてるとFalseなのですが
一度「End Sub」まで到達しもう一度「Sub マクロ1()」から始めると
test = True
を通過する前から
testにカーソルをあてるとTrueになります。
でもデバッグ中に四角ボタンで停止するとFalseに戻ります。
そもそもBoolean型の規定値はFalseですよね?
これはどういうことなのでしょうか?

ご教授よろしくお願いします。

Aベストアンサー

こんばんは。

今まで、そんなことは考えてみたことはありませんが、たぶん、確保した変数が、途中で止めることで、壊れてしまうのだと思いますね。ただ、どこにも、こんな話は書かれていないと思います。あえていうなら、不完全なマクロがあるようなプロジェクトでは、Public 変数は置けないということでしょう。

例えば、このようにしてエラーを発生させても、test の値は確保できません。

'--------------------------------------
'第一テスト

Public test As Boolean
Sub マクロ1()
  Dim a As Long
  test = True
  a = "A" '←エラーを発生させる
End Sub

''End Sub まで、来ないと値を確保できないのです。

'--------------------------------------
'第二テスト

Public test As Boolean
Sub マクロ1() '1
  MsgBox test
  test = True
End Sub

Sub マクロ2() '2
  Dim a As Long
  test = True
  a = "A" '←エラーを発生させる
End Sub

'1 --> 2 (エラー発生) -->3 で、チェックする。
'--------------------------------------
これで分かるのは、エラーが発生すると、今まで確保した値が飛んでしまうということです。
だから、必ず、On Error トラップで、最低でも、End Sub まで持ってこさせなくてはなりませんが、次の例の場合は、やはり、変数の値は確保できません。

'--------------------------------------
'第三テスト

Public test As Boolean
Sub マクロ3()
  MsgBox test
  test = True
  Call マクロ4
End Sub

Sub マクロ4()
  Dim a As Long
  On Error GoTo ErrHandler
  a = "A"
ErrHandler:
  If Err.Number > 0 Then
   End
  End If
End Sub

'マクロ3のみ
'--------------------------------------
以下の、コメントブロックして、マクロ3に戻って、End Sub をすれば、値は確保できます。
'  If Err.Number > 0 Then
'   End
'  End If

こんばんは。

今まで、そんなことは考えてみたことはありませんが、たぶん、確保した変数が、途中で止めることで、壊れてしまうのだと思いますね。ただ、どこにも、こんな話は書かれていないと思います。あえていうなら、不完全なマクロがあるようなプロジェクトでは、Public 変数は置けないということでしょう。

例えば、このようにしてエラーを発生させても、test の値は確保できません。

'--------------------------------------
'第一テスト

Public test As Boolean
Sub マクロ1()
  Dim a ...続きを読む

QWorksheets.Count の場合 Dim i As Byte ではいけませんか?

Office XP Personal 2002
Excel 2002

今まで、メモリ等をそれほど気にしなくて使用してきましたが、
下記の 1 のほうが、メモリを使わないのでよろしいかと思いますが、
どうなんでしょうか?
それとも、もっと他のことで、メモリの節約をしたほうがよろしいでしょうか。
(シートを256枚以上も使用することはありませんので)
(他の質問等をみても、Byte は、ほとんど見かけないように思いましたので)

初歩的な質問かと思われますが、
よろしくお願い致します。

'1
Dim i As Byte   '1バイト
'2
Dim i As Integer '2バイト

For i = 1 To Worksheets.Count - 1

Aベストアンサー

Byte で、特に問題は無いと思いますが、

メモリーの節約が目的なら、これで節約できるメモリーは1バイトです
PCのメモリーが数百メガ~数ギガバイトもあるという現状では、あまり意味が無いと思います
影響が有るとすれば、
配列変数で、何千万個も使用する場合とか...でしょうか

ループ変数として使用する場合でも、255回程度のループなら実行速度に影響は無いと思います

Qヘルプの質問(A)とキーワード(I)が...

お世話になります。
MS-Office(Excel,Word,Access等)のヘルプを開くと、左側の三つのタブのうち目次(C)は正常ですが質問(A)とキーワード(I)のところが真っ白なのです。
どなたか正常に戻す方法をご存知の方がいらっしゃいましたら教えて頂けませんでしょうか。
よろしくお願いいたします。

Aベストアンサー

こんにちは~

↓のことでしょうか?
[OFFXP]ヘルプの[質問]タブと[キーワード]タブに何も表示されない
http://support.microsoft.com/default.aspx?scid=kb;ja;418569

Qdoc file ioconのclickでメモ帳が

起動して当然文字化け。
解決法を。
このiconをword iconにD&Dしたら正しくwordで開けます。
win8.1、word97.

Aベストアンサー

Wordドキュメント(*.doc)に対する「既定のプログラム」が、メモ帳に変更されているのだと思います。
ただ、それだとファイルのアイコンはメモ帳のアイコンになるはずなのですが・・・

とりあえず、「コントロール パネル」→「既定のプログラム」→「ファイルの種類またはプロトコルのプログラムへの関連付け」を開き、その中から対象の拡張子(.doc)を探してください。

恐らく「現在の既定のプログラム」が、メモ帳になっていると思います。
対象の拡張子を選択した状態で「プログラムの変更」をクリックし、「Microsoft Word」に設定すれば、Wordで開くようになります。


人気Q&Aランキング

おすすめ情報