
Excelのシートに以下のマクロを組みましたが、空白でダブルクリックして、写真選択。
写真をダブルクリックで貼付けまではいいのですが、画像にリンクが設定されてしまい、
元データを削除すると、貼り付けた画像まで消えてしまいます。
マクロは、詳しくないので、貼り付ければいいようにお願いいしたいです。
よろしくお願い致します。
<下記に構文を添付>
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
' ターゲットセルが指定したセル(A2, C2, A4, C4, A6, C6)のいずれでもない場合、CancelをTrueに設定します。
Cancel = True
' ターゲットセルが指定したセル(A2, C2, A4, C4, A6, C6)のいずれかであれば、処理を実行します。
If Not Intersect(Target, Union(Range("ar2:ar20"), Range("at2:at20"), Range("av2:av20"), Range("ax2:ax20"), Range("az2:az20"), Range("bb2:bb20"), Range("bd2:bd20"), Range("bf2:bf20"), Range("bh2:bh20"), Range("bj2:bj20"), Range("bl2:bl20"))) Is Nothing Then
' ファイル選択ダイアログを作成します。
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Select an Image File" ' ダイアログのタイトルを設定します。
.Filters.Clear ' 既存のフィルターをクリアします。
.Filters.Add "Image Files", "*.GIF; *.JPG; *.JPEG; *.BMP; *.PNG; *.TIF", 1 ' 画像ファイルのフィルターを追加します。
' ダイアログで画像が選択されたら、その画像をダブルクリックされたセルに挿入します。
If .Show = -1 Then
Dim Picture As Picture
Set Picture = ActiveSheet.Pictures.Insert(.SelectedItems(1))
' 挿入した画像のサイズと位置をダブルクリックされたセルに合わせます。
With Picture
With .ShapeRange
.LockAspectRatio = msoFalse
.Width = Target.Width * 0.85
.Height = Target.Height * 0.9
'セルの中央(横方向/縦方向の中央)に配置
.Left = Target.Left + (Target.Width - .Width) / 2
.Top = Target.Top + (Target.Height - .Height) / 1.5
End With
Application.ScreenUpdating = True
Cancel = True
.Placement = xlMoveAndSize
End With
End If
End With
End If
変更箇所をお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
No1です。
御質問文に
>以下のマクロを組みましたが~~
とありましたので、(詳しい/詳しくないかは関係なく)組んだのであればわかるであろう回答をしました。
>本文の修正箇所をご教授お願いします。
No1に記した通り、「Pictures.Insert」メソッドを「Shapes.AddPicture」メソッドに置き換えれば、リンクのコントロールは可能になります。
とは言え、コードを作成する気はないらしいので・・・
ご提示のコード中のコメントと実際の処理が異なっている部分があちこちありますが、コードの方を正と解釈しました。
特に、
>'セルの中央(横方向/縦方向の中央)に配置
とありますが、コード通りに中央ではなくずらした位置にしてあります。
無駄や重複もあるので処理方法や記述は変えましたが、処理内容は「画像のリンク」以外は同じになるようにしたつもりです。
(画像の縦横比を変えてしまうのにも違和感を覚えますがそのままです)
Private Sub Worksheet_BeforeDoubleClick( _
ByVal T As Range, Cancel As Boolean)
Dim P As String
Cancel = True
If Intersect(T, Range("AR2:BL20")) Is Nothing Or T.Column Mod 2 = 1 _
Then Exit Sub
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Select an Image File"
.Filters.Clear
.Filters.add "Image Files", "*.GIF; *.JPG; *.JPEG; *.BMP; *.PNG; *.TIF", 1
If .Show = 0 Then Exit Sub
P = .SelectedItems(1)
End With
With ActiveSheet.Shapes.AddPicture(P, 0, -1, T.Left + T.Width * 0.075, _
T.Top + T.Height / 15, T.Width * 0.85, T.Height * 0.9)
.LockAspectRatio = msoFalse
.Placement = xlMoveAndSize
End With
End Sub
早速の対応ありがとうございます。
大変助かりました。
役所対応で写真提出(2000枚位)しなければいけなかったのたすかりました。
No.1
- 回答日時:
こんにちは
Pictures.Insertでも可能なのかも知れませんが仕様の説明が読み切れません。
第二引数に「object:Converter」とありますが、Converterにどのような指定をすればよいのかわかりませんでした。
https://learn.microsoft.com/ja-jp/dotnet/api/mic …
一方で、Shapes.AddPictureメソッドを利用すれば、第二引数にLinkToFileがあり、msoFalseを指定すればリンクをせずに画像貼り付けが可能になりますので、こちらを利用して貼り付けるようにすればよいでしょう。
https://learn.microsoft.com/ja-jp/office/vba/api …
早々の返答ありがとうございます。
本文の書いてる通り、マクロ超初心者のためやり方がわかりません。
本文の修正箇所をご教授お願いします。
*構文もネットよりコピペしております。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBA Private Sub Worksheet_Changeで 1 2024/05/01 16:59
- Visual Basic(VBA) シートモジュールを複数作成することはできるのでしょうか? 2 2023/08/30 18:48
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) Excel VBA ダブルクリックで入力 複数まとめる 1 2023/11/28 00:16
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2024/07/02 08:51
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2024/12/05 16:25
- Visual Basic(VBA) Excelのマクロについて教えてください。 1 2024/06/18 09:20
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- Visual Basic(VBA) Excelのマクロについて教えてください。 2 2024/11/21 10:13
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルの改行について
Visual Basic(VBA)
-
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
不要項目の行削除方法について
Visual Basic(VBA)
-
-
4
vbaマクロについて
Visual Basic(VBA)
-
5
VBAでFOR NEXT分を Application.OnTimeを使って
Visual Basic(VBA)
-
6
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
7
算術演算子「¥」の意味について
Visual Basic(VBA)
-
8
Vba Declare Functionを使う環境依存文字が化ける
Visual Basic(VBA)
-
9
Excelマクロで使うVBAコードをスプレッドシートのGoogle Apps Scriptに変換
Visual Basic(VBA)
-
10
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
11
【マクロ】開いているブックの名前を取得した後、名前をセルに1つづつ入力するには?
Visual Basic(VBA)
-
12
Vba Array関数について教えてください
Visual Basic(VBA)
-
13
エクセル タブの下のメニューを選択 実行するコード
Visual Basic(VBA)
-
14
【ExcelVBA】dictionaryの重複判断の基準(セル結合だと違う値として認識される)
Visual Basic(VBA)
-
15
VBAでセルの書式を変えずに文字列を置換する方法をご教示ください
Visual Basic(VBA)
-
16
エクセル数式に問題があります
Excel(エクセル)
-
17
修正依頼:【VBA】 結合セルに複数画像とファイル名一括挿入する方法
Visual Basic(VBA)
-
18
Excel マクロについて詳しい方、ご教示ください。 『行数が毎回変わる元データの、A列に「1」と入
Visual Basic(VBA)
-
19
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
20
VBA 最終行の取得がうまくいかず上書きされてしまいます。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【マクロ】オートフィルター を...
-
【ExcelVBA】5万行以上のデー...
-
Vba セルの4辺について罫線が有...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
vbsでのwebフォームへの入力制限?
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
ワードの図形にマクロを登録で...
-
testファイル内にある複数のpng...
-
【マクロ】開いているブックの...
-
【ExcelVBA】値を変更しながら...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
エクセルの改行について
-
ダブルクリックで貼り付けた画...
-
VBAでFOR NEXT分を Application...
-
vbaマクロについて
-
エクセルのVBAコードと数式につ...
-
【マクロ】変数を使った、文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba セルの4辺について罫線が有...
-
vbsでのwebフォームへの入力制限?
-
【ExcelVBA】5万行以上のデー...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
【マクロ】並び替えの範囲が、...
-
エクセルの改行について
-
エクセルのマクロについて教え...
-
vb.net(vs2022)のtextboxのデザ...
-
VBAでCOPYを繰り返すと、処理が...
-
VBA ユーザーフォーム ボタンク...
-
エクセルのVBAコードと数式につ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
【マクロ】変数を使った、文字...
-
改行文字「vbCrLf」とは
-
質問58753 このコードでうまく...
-
【マクロ】シートの変数へ入れ...
-
ワードの図形にマクロを登録で...
-
算術演算子「¥」の意味について
おすすめ情報