やりたいこと
・ファイル内にある複数画像をまとめて指定したサイズにリサイズして貼り付けたい
・貼り付けた際に、画像横のセルにファイル名を転記したい
・貼り付けた時に行幅を画像に合わせたい(これは可能なら入れたい)
人様が作られたコードを切り貼りしながら形にしてみましたが、
貼付け時の縦横比の固定がうまくできません。
.LockAspectRatio = True
を組み込もとしてもどこに入れれば良いか分からず悩んでおります。
お知恵をお貸しください。
VBA
1Sub 画像をまとめてリサイズして貼り付け() 2 3Dim strFilter As String 4Dim Filenames As Variant 5Dim PIC As Picture 6Dim Path As String, WSH As Variant, OpenFileName As String 7Dim W As Single 8Dim H As Single 9 10With Application 11 12'ファイルオープンをデスクトップ指定 13Set WSH = CreateObject("WScript.Shell") 14Path = WSH.SpecialFolders("desktop") & "\" 15ChDir Path 16 17' 「ファイルを開く」ダイアログでファイル名を取得 18strFilter = "画像ファイル(*.jpg;*.jpeg;*.gif;*.bmp;*.png),*.jpg;*.jpeg;*.gif;*.bmp;*.png" 19Filenames = Application.GetOpenFilename( _ 20FileFilter:=strFilter, _ 21Title:="図の挿入(複数選択可)", _ 22MultiSelect:=True) 23If Not IsArray(Filenames) Then Exit Sub 24 25W = .InputBox("ヨコ(cm)", Type:=1) 26H = .InputBox("タテ(cm)", Type:=1) 27.ScreenUpdating = False 28 29' ファイル名をソート 30Call BubbleSort_Str(Filenames, True, vbTextCompare) 31 32' 貼り付け開始セルを選択 33Range("A2").Select 34 35' マクロ実行中の画面描写を停止 36Application.ScreenUpdating = False 37 38For i = LBound(Filenames) To UBound(Filenames) 39 40Set PIC = ActiveSheet.Pictures.Insert(Filenames(i)) '画像貼り付け 41 42PIC.Width = W / 0.03527 'cm変換 43PIC.Height = H / 0.03527 'cm変換 44 45ActiveCell.Offset(0, 1) = Dir(Filenames(i)) 'ファイル名 46 47' 次の貼り付け先を選択(アクティブセルにする 48ActiveCell.Offset(1, 0).Activate 49Next i 50 51' 終了 52Application.ScreenUpdating = True 53MsgBox i - 1 & "枚の画像を挿入しました", vbInformation 54 55End With 56End Sub 57 58' バブルソート(文字列) 59Private Sub BubbleSort_Str( _ 60ByRef Source As Variant, _ 61Optional ByVal SortAsc As Boolean = True, _ 62Optional ByVal Compare As VbCompareMethod = vbTextCompare) 63 64If Not IsArray(Source) Then Exit Sub 65 66Dim i As Long, j As Long 67Dim vntTmp As Variant 68For i = LBound(Source) To UBound(Source) - 1 69For j = LBound(Source) To LBound(Source) + UBound(Source) - i - 1 70If StrComp(Source(IIf(SortAsc, j, j + 1)), _ 71Source(IIf(SortAsc, j + 1, j)), Compare) = 1 Then 72vntTmp = Source(j) 73Source(j) = Source(j + 1) 74Source(j + 1) = vntTmp 75End If 76Next j 77Next i 78 79End Sub
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/18 11:06