|    | 
     はじめまして。 
どなたか分かる方がいましたらお答えいただければ幸いです。 
 
EXCEL VBAにて複数の写真を一括貼り付けできるマクロを組みました。 
しかし、私がつくったものは全てリンク貼り付けとなってしまいます。 
仕事上、送受信やファイル名変更がたびたびあり、そのたびにリンクが切れてしまい大変不便です。 
どのように変更すればリンク貼り付けではなくなるでしょうか。 
 
また、こちらは出来ればでいいのですが、写真を貼り付けた際、写真のファイル名をセルに表示することは可能でしょうか。 
 
よろしくお願いいたします。 
 
Sub 複数の画像を挿入() 
   
  Dim strFilter As String 
  Dim Filenames As Variant 
  Dim PIC    As Picture 
   
  ' 「ファイルを開く」ダイアログでファイル名を取得 
  strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png" 
  Filenames = Application.GetOpenFilename( _ 
          FileFilter:=strFilter, _ 
          Title:="図の挿入(複数選択可)", _ 
          MultiSelect:=True) 
  If Not IsArray(Filenames) Then Exit Sub 
  
  ' ファイル名をソート 
  Call BubbleSort_Str(Filenames, True, vbTextCompare) 
   
  ' 貼り付け開始セルを選択 
  Set Rng = Application.InputBox( _ 
    Prompt:="貼り付け開始セルを入力してください", _ 
    Title:="セル選択ダイアログ", _ 
    Type:=8) 
     
    Rng.Select 
   
  ' マクロ実行中の画面描写を停止 
  Application.ScreenUpdating = False 
   
  L = InputBox("画像の間隔を入力してください") 
  N = InputBox("画像の高さを入力してください(行の高さ)") 
   
   
  ' 順番に画像を挿入 
  For i = LBound(Filenames) To UBound(Filenames) 
    Set PIC = ActiveSheet.Pictures.Insert(Filenames(i)) 
    
    '------------------------------------------------------------- 
    ' 画像の各種プロパティ変更 
    '------------------------------------------------------------- 
    With PIC 
      .Top = ActiveCell.Top    ' 位置:アクティブセルの上側に重ねる 
      .Left = ActiveCell.Left   ' 位置:アクティブセルの左側に重ねる 
      .Placement = xlMove     ' 移動するがサイズ変更しない 
      .PrintObject = True     ' 印刷する 
    End With 
    With PIC.ShapeRange 
      .LockAspectRatio = msoTrue  ' 縦横比維持 
      .Height = N 
    End With 
 
    ActiveCell.Offset(L).Select 
   
    Set PIC = Nothing 
  Next i 
  
  ' 終了 
  Application.ScreenUpdating = True 
  MsgBox i & "枚の画像を挿入しました", vbInformation 
 
End Sub 
 
' バブルソート(文字列) 
Private Sub BubbleSort_Str( _ 
  ByRef Source As Variant, _ 
  Optional ByVal SortAsc As Boolean = True, _ 
  Optional ByVal Compare As VbCompareMethod = vbTextCompare) 
  
  If Not IsArray(Source) Then Exit Sub 
  
  Dim i As Long, j As Long 
  Dim vntTmp As Variant 
  For i = LBound(Source) To UBound(Source) - 1 
    For j = LBound(Source) To LBound(Source) + UBound(Source) - i - 1 
      If StrComp(Source(IIf(SortAsc, j, j + 1)), _ 
            Source(IIf(SortAsc, j + 1, j)), Compare) = 1 Then 
        vntTmp = Source(j) 
        Source(j) = Source(j + 1) 
        Source(j + 1) = vntTmp 
      End If 
    Next j 
  Next i 
 
End Sub 
 
 | 
     
    
   |