
エクセルでVBAを使用じ工事写真台帳を作成しています。
まだまだ初心者ですので、なかなか思うようにいきません。詳しい方助けて下さい。
何とか組んで使用できるのですが、一つのセルのみで複数選択する事が出来ません。
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Application.Intersect(Target, Range("B13:F23")) Is Nothing Then Exit Sub
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
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
上から3行目の(Target, Range("B13:F23"))で、このセルにはダブルクリック、フォルダー選択、写真貼付けができます。
ただ複数選択する事が出来ません。
うまく伝えられず、申し訳ありませんが詳しい方、ご回答宜しくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No.1です。
お礼に書かれている回答内容が意味不明ですが・・・。「選択したファイルを選択したセルに張り付ける」というのが本来の仕様と認識していますが、ダブルクリックでは複数のセルを選択することができません。よって、選択した2つ目以降のファイルの貼り付け先をどうするか、決め事が必要になります。
とりあえず、選択したセルから右へ順に張り付けるサンプルを作ってみました。変更箇所はご自分で確認してください。ご検討をお祈りします。
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
If Application.Intersect(Target, Range("B13:F23")) Is Nothing Then Exit Sub
Dim myF As Variant
Dim myFs 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
Cancel = True
'===============画像選択
myFs = Application.GetOpenFilename _
("jpg bmp tif png gif,*.jpg;*.bmp;*.tif;*.png;*.gif", , "画像の選択", , True)
If Not IsArray(myFs) 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) '★ とりあえず 縦横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
Set Target = Target.Offset(0, 1)
Next myF
End Sub
No.1
- 回答日時:
GetOpenFilenameメソッドのMultiSelectオプションにTrueを指定すれば複数ファイルを選択することができるようになります。
しかし、ダブルクリックイベントプロシジャで受け取れるTargetセルは1つのみです。要するに複数のファイルを選択しても貼り付け先のセルが1つしかないので、残りのファイルをどうするか決める必要があります。同じセルに重ねて張りますか?それとも右隣(または下)に貼りますか?ママチャリさん
回答ありがとうございます。
複数選択は、A4サイズに3枚、4枚と貼り付けたいです。
やはりこのプログラムでは無理ですか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) Excel2019 マクロを使用し画像を貼り付けした際のリンク切れについて 2 2022/11/15 16:14
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelで、スクロールをすると限...
-
エクセルで連続データから、数...
-
エクセルの画面で十字マークが...
-
Excel 小さくなったスクロール...
-
セルをクリックすると付箋のよ...
-
エクセル 画面上の行数を調節...
-
エクセルで任意のセルをクリッ...
-
複数のセルの入力内容を一度に...
-
エクセルで、結合したセルを選...
-
EXCEL アルファベットと数字の...
-
エクセルでハイパーリンクのU...
-
excelで1行ごとに一気に削除す...
-
エクセル 数値を全て「1」にす...
-
エクセルでカーソルが四方に矢...
-
Excelで急に動かなくなる
-
エクセルで0を除いて昇順に並...
-
ピポットテーブルエラー解決方法
-
Excel選択を繰り返すとセルの色...
-
列選択で勝手に広範囲に範囲選...
-
フィルタを解除した後の表示位置
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで連続データから、数...
-
excelで、スクロールをすると限...
-
複数のセルの入力内容を一度に...
-
Excel 小さくなったスクロール...
-
EXCEL アルファベットと数字の...
-
エクセルの画面で十字マークが...
-
エクセル 画面上の行数を調節...
-
セルをクリックすると付箋のよ...
-
excelで1行ごとに一気に削除す...
-
エクセルでハイパーリンクのU...
-
エクセル 数値を全て「1」にす...
-
エクセルで、結合したセルを選...
-
エクセルで任意のセルをクリッ...
-
Excelで表のデータを並び替えた...
-
ピポットテーブルエラー解決方法
-
エクセルでカーソルが四方に矢...
-
エクセルVBA 複数行にまたがっ...
-
Shift押しながら、矢印ボタンで...
-
列選択で勝手に広範囲に範囲選...
-
エクセルで1つおきに列を削除...
おすすめ情報