|
新規のトピにして質問し直します。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=22637;id=excelの続きです。
▼ichinose さん:
ponponです。 こんばんは。
もう少しつきあってください。
>Typename関数の詳細は、HELPでチェックしてみてください。
これは、何回か見たことがあるので、ヘルプで検索し、サンプルとして保存しています。あまり使いませんが、というより使うようなマクロを書いたことがない。
>ユーザー定義のコマンドバーを作成して、
>そこにいくつかのボタンを配置した場合に
>登録したマクロにこのApplication.Callerを使用すると
>配列を返してくれます。以下のコードは、その例です。
>Sub sample1()
>'各ボタンに登録するマクロ
>' msgbox typename(application.caller)
> If LCase(TypeName(Application.Caller)) = "variant()" Then
> c_inf = Application.Caller
> '配列を返します c_inf(1)---インデックス
> ' c_inf(2)---コマンドバーの名前
↑
配列のことが十分わかっていないし、もちろん使いこなしていないのですが、
c_inf()には、二つの値が配列ではいているということでしょうか?
c_inf(1)---インデックス c_inf(2)---コマンドバーの名前
私のイメージからすると、ボタンの名前?ボタンのコレクション?(この場合1,2,3,4,5,6,7,8,9,0)が、配列の値として、入っているような気がしたのですが・・・・・。
私がひっつずつShapes(1)としたのを
ichinoseさんが、shpnm = Application.Caller
With ActiveSheet.Shapes(shpnm) とされたように。
コマンドバーとボタンのセットで caller だからかな?
> With Application.CommandBars(c_inf(2))
> MsgBox .Controls(c_inf(1)).Caption & "のボタンが押されました"
↑
だから、一々ボタンの名前を記述しなくても、押したボタンの名前がMSGされるのだと思っていました。
この場合、1のボタンが押されたときに A のマクロ、2のボタンが押されたときに B のマクロというように条件分岐するにはどうするのでしょうか?
> End With
> End If
>End Sub
|
|