|
▼bykin さん:
早速教えていただき、ありがとうございました。
Application.Callerを使うと、
1個のプロシージャで全てまかなえ、
とてもすっきりしたコードになりました。
感激しました。ありがとうございました。
ただ、ボタンの名前を数字のみにした場合、
一つ目以降の数値を見に行くように、
With Cells((Val(Mid$(Application.Caller, 1)) - 1) * 13 + 2, 2)
とすると、デバックとなります。
これは、どうしてでしょうか。
また、ボタンを使わず、
任意のセルをダブルクリックすると、
その右隣のセルに画像を挿入することは可能でしょうか。
たとえば、b1のセルをダブルクリックすると、
b2のセルに、自動的に縮小された画像を挿入したいのです。
この場合の、セル位置の指定方法が分かりません。
もし、この方法が可能なら、
後から入れ忘れた画像を挿入する場合も、
セルをコピーすれば、行位置が変わっても、
そのままコードを利用できるのでは・・と思うのですがいかがでしょうか。
たびたび申し訳ありませんが、どうぞ宜しくお願いいたします。
>こんばんわ。
>
>何か最近似たようなご質問が多いけど・・・(^^;;
>こういうときにこそApplication.Callerを使うんです。
>
>【1】準備
>
>各ボタンの名前を次のように変更しておきます。
>2行目のボタン:ボタン 1
>15行目のボタン:ボタン 2
>28行目のボタン:ボタン 3
> ・
> ・
>262行目のボタン:ボタン 21
>
>※上記例は一応デフォルトの名前に合わせてあります。
>
>【2】マクロコード(標準モジュール)
>
>Public Sub InsertPicture()
> Dim fName As Variant
> Dim PicTop As Single
> Dim PicLeft As Single
>
> fName = Application.GetOpenFilename _
> ("画像ファイル,*.gif;*.jpg;*.bmp", 1, "画像挿入")
>
> If fName = False Then
> Exit Sub
> End If
>
> Application.ScreenUpdating = False
>
> '↓クリックしたボタンの名前の5文字目以降の数値を取り出して
> '↓挿入位置を計算している
> With Cells((Val(Mid$(Application.Caller, 5)) - 1) * 13 + 2, 2)
> PicTop = .Top
> PicLeft = .Left
> End With
>
> With ActiveSheet.Pictures.Insert(fName)
> .Top = PicTop
> .Left = PicLeft
> .Height = 234#
> .Width = 312#
> End With
> Application.ScreenUpdating = True
>End Sub
>
>【3】該当ボタン全部を選択して上記マクロを登録します。
>
>こうすれば、1個のプロシージャで全てまかなえます。
>
>※変数はDimでちゃんと宣言してから使うことをお勧めします。
>
>試してみてな。
>ほな。
|
|