こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBA 画像貼り付けのオプション指定法

VBA初心者です。MS Office 201で,Excelに画像を貼り付けるとき,アスペクト比を保って幅を指定,位置をセルの位置で指定,名前を付けたいので,ネットを参考にして,以下の通りにしました。
Range("A6").Select 'A6の位置を指定
ActiveSheet.Pictures.Insert(myFile).Select 'myFileはあらかじめ設定
With ActiveSheet.Shapes(3)
.LockAspectRatio = True
.Width = 160
.Name = "Pict01" '名前はPict01
End With
ここで,Shapes(3)の3は,画像やボタンがこのシートで3番目だからです。しかし,マクロ実行前に,ボタン等を増やすと変わってきてしまいます。この(3)の様な指定なしにできませんでしょうか。

投稿日時 - 2017-09-06 21:14:02

QNo.9371702

すぐに回答ほしいです

質問者が選んだベストアンサー

With Selection
にして下さい。
.Select
で画僧が指定されているので、
Selection で張り付けた画像が指定されます。

投稿日時 - 2017-09-06 22:34:48

お礼

ありがとうございました。うまくいきました。

投稿日時 - 2017-09-07 08:19:15

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんにちは。

挿入する(挿入後の)オブジェクトの捉え方、
というテーマで、2通りお応えします。

Pictures.Insertメソッドの場合は、戻り値として、
Picture型のオブジェクトを返します、ので、
挿入した画像をシェイプとして捉えるには、
  ActiveSheet.Pictures.Insert(myFile).ShapeRange
という書き方が出来ます。
' //
Sub try()
Dim myFile As String
  myFile = "画像ファイルパス"

  With ActiveSheet.Pictures.Insert(myFile).ShapeRange
'    .Left = Range("A6").Left ' ★A列であれば省略可
    .Top = Range("A6").Top ' ★
    .LockAspectRatio = True
    .Width = 160
    .Name = "Pict01" ' ★名前はPict01
  End With
End Sub
' //

オブジェクトを挿入するメソッドは、
挿入するオブジェクト毎にそれぞれ用意されていますが、
大抵、".Insert"とか".Add"等の名前のメソッドなのですが、
戻り値として、挿入後のオブジェクトを返さないものも
多くあります。
挿入後のオブジェクトを返さないメソッドの場合や、
どちらだか(VBAの編集者が)判らない場合には、
  最後に挿入した図形(Shapeオブジェクト)
という意味で、
  ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
のような捉え方を覚えておけば、
都度悩むことなく、汎用的に活用できるようになります。
' //
Sub try2()
Dim myFile As String
  myFile = "画像ファイルパス"

  ActiveSheet.Pictures.Insert myFile

  With ActiveSheet.Shapes(ActiveSheet.Shapes.Count)
'    .Left = Range("A6").Left ' ★A列であれば省略可
    .Top = Range("A6").Top ' ★
    .LockAspectRatio = True
    .Width = 160
    .Name = "Pict01" ' ★名前はPict01
  End With
End Sub
' //

一般論として、記録マクロでは、
ユーザー操作を忠実に再現する意味で、
SelectやSelection等といった記述が残ることが多いのですが、
これを実用のマクロへと編集する際には、
SelectやSelection等の記述を使わない記述に
書換えるように心掛けておいた方が、
意図しない挙動を招くことや無駄なエラー停止が減らせますので、
今後の課題にしてみてください。

尚、上掲スクリプト中、★でマークした行には、
実行を繰り返す度に変動するであろう指定値が含まれていますので、
必要に応じて適宜工夫してみてください。

以上です。

投稿日時 - 2017-09-07 08:07:41

お礼

ありがとうございました。大変に参考になる事柄をご丁寧に書いてくださり,感謝いたします。ベストアンサーにしたいところですが,最初の方のもありがたいご回答でした。順番から最初の方の方を「ベストアンサー」にさせていただきました。すみません。

投稿日時 - 2017-09-07 08:22:53

あなたにオススメの質問