excel マクロ 画像挿入
以下のマクロでリンク貼り付けではない 画像挿入を作成しようと思いましたがエラーになります
詳しい方 修正 お願いいたします
当方のしたい事としましては
選択したセルでのみに画像挿入 リンクではない画像貼り付け
以下例では B3,B17,B31,B46,B60,B74 セルをダブルクリックすればそこに画像を挿入です
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim myF As Variant
Dim mySp As Object
Dim myAD1 As String
Dim myAD2 As String
Dim myHH As Double
Dim myWW As Double
Dim myHH2 As Double
Dim myWW2 As Double
If Not Intersect(Range("B3,B17,B31,B46,B60,B74"), Target) Is Nothing Then
myPic = Application.GetOpenFilename("画像ファイル,*.jpg;*.jpeg;*.gif;*.tif")
Cancel = True
'===============画像選択
myF = Application.GetOpenFilename _
("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , False)
If myF = False Then
MsgBox "画像を選択してください(終了)"
Exit Sub
End If
'===============画像の掃除
For Each mySp In ActiveSheet.Shapes
myAD1 = mySp.TopLeftCell.MergeArea.Address
myAD2 = Target.Address
If myAD1 = myAD2 Then mySp.Delete
Next
'===============画像の貼り付け
Set mySp = ActiveSheet.Shapes.AddPicture(Filename:=myF, LinkToFile:=False, _
SaveWithDocument:=True, Left:=Target.Left, Top:=Target.Top, _
Width:=0, Height:=0) '★ とりあえず 縦横0で。
mySp.ScaleHeight 1, msoTrue '★元のサイズに戻す
mySp.ScaleWidth 1, msoTrue '★元のサイズに戻す
'===============タテヨコの縮尺を保持
If mySp.Width > Target.Width Then mySp.Width = Target.Width
If mySp.Height > Target.Height Then mySp.Height = Target.Height
'===============中央へ調整
myHH2 = (Target.Height / 2) - (mySp.Height / 2)
myWW2 = (Target.Width / 2) - (mySp.Width / 2)
mySp.Top = Target.Top + myHH2
mySp.Left = Target.Left + myWW2
Set mySp = Nothing
End Sub
お礼
myRange様 先ほど補足を入力してすぐに 「ん?相対パスでもいいのなら…」 と思って色々試してみたところ、画像を表示することができました! 「HYPERLINK関数」で呼び出したパスの頭に「..¥」を足したらできました。 びっくりです。 ちょっと急いでいたのでとても助かりました! どうもありがとうございました。
補足
素早いご回答ありがとうございます! 質問に書き忘れていたのですが、画像を種類ごとにいくつかのフォルダに分けています。 ・ブックを1階層とすると3階層まで ・最終のフォルダ数は30フォルダ(画像数:合わせて5000枚)) 後から大事な情報を申し上げてすみません。 ※■←ブック/□←フォルダ とすると ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 階層1 ■ □…画像フォルダ ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 階層2 □…Aフォルダ □…Bフォルダ □…Cフォルダ □…Dフォルダ ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ 階層3 □□□□□□□□□□□□□ (Aフォルダの中:13フォルダ) □□□□□□□□□□ (Bフォルダの中:10フォルダ) □□□□ (Cフォルダの中: 5フォルダ) □□ (Dフォルダの中: 2フォルダ) ↑それぞれに「.jpg画像」が入っている ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ という構成です。 (関係ないかもしれませんが)今の自分でもできることは 「あらかじめ関数で※のようにパスを文字列として呼び出しておくこと」 ぐらいでしょうか。 ※..\画像フォルダ\Aフォルダ\最後のフォルダ\いちご01.jpg もしお時間がありましたら、ヒントをいただけると大変助かります。 自分でも教えていただいたコードを元に調べてみたいと思います。 よろしくお願いいたします。