[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『【EXCEL VBA】挿入した画像のファイル名を隣のセルに自動で表示したい』(七瀬しおり)
はじめまして。ご訪問ありがとうございます。
VBA初心者です。ただいまエクセルを使用し、下記の様な写真リストを作成しております。
A(種別) B(画像) C(ファイル名)
B列のセル上でダブルクリックすると、[ファイルを開く]ダイアログボックスが表示され、選択した画像(複数可)がセルの大きさに自動でリサイズされ貼り付けられる仕様です。
そこに、画像の隣のセルに自動でファイル名を取得し表示する機能を追加したいのですが、上手く行かなくて困っております。
今のマクロにどの様に追記すれば良いか教えていただきたく、どうぞよろしくお願いいたします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim myFs As Variant
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 Intersect(Target, Columns(2)) Is Nothing Then Exit Sub
Cancel = True
'画像選択コマンド
myFs = Application.GetOpenFilename _
("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , True)
If IsArray(myFs) = False Then
MsgBox "画像を選んで下さい(終了します)"
Exit Sub
End If
'画像データの再構築
For Each myF In myFs
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)
mySp.ScaleHeight 1, msoTrue
mySp.ScaleWidth 1, msoTrue
'タテヨコの縮尺を保持
myHH = Target.Height / mySp.Height
myWW = Target.Width / mySp.Width
If myHH > myWW Then
mySp.Height = mySp.Height * myWW
mySp.Width = Target.Width
Else
mySp.Height = Target.Height
mySp.Width = mySp.Width * myHH
End If
'センター中心に配置
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
Set Target = Target.Offset(1)
Next myF
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows8 >
きちんとインデントをつけるべきです。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) Dim myFs As Variant 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 Intersect(Target, Columns(2)) Is Nothing Then Exit Sub
Cancel = True '画像選択コマンド myFs = Application.GetOpenFilename _ ("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , True) If IsArray(myFs) = False Then MsgBox "画像を選んで下さい(終了します)" Exit Sub End If '画像データの再構築 For Each myF In myFs 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) mySp.ScaleHeight 1, msoTrue mySp.ScaleWidth 1, msoTrue
'タテヨコの縮尺を保持 myHH = Target.Height / mySp.Height myWW = Target.Width / mySp.Width If myHH > myWW Then mySp.Height = mySp.Height * myWW mySp.Width = Target.Width Else mySp.Height = Target.Height mySp.Width = mySp.Width * myHH End If
'センター中心に配置 myHH2 = (Target.Height / 2) - (mySp.Height / 2) myWW2 = (Target.Width / 2) - (mySp.Width / 2) mySp.Top = Target.Top + myHH2 mySp.Left = Target.Left + myWW2
' ここに追加 ==================== 'Target.Offset(0, 1).Value = myF ' フルパス Target.Offset(0, 1).Value = Dir(myF) 'ファイル名
Set mySp = Nothing Set Target = Target.Offset(1) Next myF End Sub
(γ) 2017/10/01(日) 04:16
(七瀬しおり) 2017/10/01(日) 04:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.