Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


58795 / 76732 ←次へ | 前へ→

【22660】application.callerについて
質問  ponpon  - 05/2/25(金) 22:19 -

引用なし
パスワード
   新規のトピにして質問し直します。
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

1 hits

【22660】application.callerについて ponpon 05/2/25(金) 22:19 質問
【22664】Re:application.callerについて ichinose 05/2/26(土) 0:44 発言
【22669】Re:application.callerについて ponpon 05/2/26(土) 10:17 お礼

58795 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free