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

エクセルで写真集を作るためのVBAですが、以下のVBAでは画像がリンク貼り付けになってしまいます。どうしたらエクセルファイルに画像を貼りこみで保存できるのでしょうか?
よろしくお願いいたします。

やりたいことは、まずダブルクリックでダイアログボックスを表示させ、挿入したい写真を選択、写真がセルに合わせた大きさに縮小、セルの中央に写真を配置。以上です。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
                    Cancel As Boolean)
  Dim PicFile As Variant
  Dim rX As Double, rY As Double

  '[ファイルを開く]ダイアログボックスを表示
  PicFile = Application.GetOpenFilename( _
            "画像ファイル,*.jpg;*.jpeg;*.gif;*.tif;*.png;*.bmp")
  If VarType(PicFile) = vbBoolean Then Cancel = True: Exit Sub


  Application.ScreenUpdating = False
  
  '画像を挿入
  With ActiveSheet.Pictures.Insert(PicFile)
    rX = Target.Width / .Width
    rY = Target.Height / .Height
    If rX > rY Then
      .Height = .Height * rY
    Else
      .Width = .Width * rX
    End If

    'セルの中央(横方向/縦方向の中央)に配置
    .Left = Target.Left + (Target.Width - .Width) / 2
    .Top = Target.Top + (Target.Height - .Height) / 2
  End With
  
  Application.ScreenUpdating = True
  Cancel = True
End Sub

A 回答 (2件)

始めまして




Excel VBA質問の場合は、どんな書式、写真集のレイアウトなどかの
情報があれば他の応用例などで結構解決する場合があります。

建築関係メーカーの営業に携わっております。
日々の予定表をExcel工程図・営業資料などは現場の工事写真帳などの
Formatを引用しております。

写真集/資料のレイアウトなどの情報がないので一概に断言出来ませんが、
結合セルのダブルクリックで写真フォルダを開くマクロの例があります。

ただし、Sheet全体のセルにセルのダブルクリックで写真フォルダを開く
事になりますが、資料作成に支障はきたしておりません。

結合セルのサイズは、通常の画像挿入で比率をきちっとしていないと
ゆがんだ形になりますが一度Formatを作成出来れば応用可能です。

Excel2010/Excel2013では、画像挿入時にリンクになって今までの
マクロが使用出来なく、マクロ探しを始めた矢先の記事です。

以下はサイト検索で探したものです。
下記の記事は実にシンプルにわかりやすく説明してありました。
引用して試してみて下さい。


引用サイト1:
『マクロを使って写真挿入』
http://www.excel.studio-kazu.jp/kw/2012031309024 …


引用サイト2:
某市の都市建築部 設備課
http://www.city.asahikawa.hokkaido.jp/files/setu …
・工事写真帳様式 (参考)ダウンロード2003形式(.xls)

Excel2013でで開いて、2003形式(.xls)/2013マクロ形式(.xlsm)で
保存しましたが今のところ問題は出ていません。

ここにマクロ記述しても良いのですが質問者様の資料の全体像が
見出せていませんのでこの様な回答にさせて頂きました。

解決される事を願っております。


最後に当方Formatでよろしかったらお持ち帰り下さい。

下記に一時保存としてアップしました。
サンプル画像あり。
https://bizfile.raksul.com/dl/8dad46f4f582ad9333 …
「エクセルに写真を挿入するVBA」の回答画像2
    • good
    • 1

insertだとリンク貼り付けになるので


AddPictureを調べてください。
    • good
    • 1

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