Excel VBA質問箱 IV

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

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


45221 / 76732 ←次へ | 前へ→

【36513】Re:フォームボタンなどでのマクロ呼出しでのSUBへの引数
回答  Kein  - 06/4/2(日) 12:46 -

引用なし
パスワード
   フォームツールバーのオブジェクトを利用するなら、登録したマクロを呼び出したとき
Callerプロパティに「そのマクロを登録しているオブジェクトの名前(Name)」を取得
することが出来ます。オブジェクトの名前は、数式バーを開いてオブジェクトを選択
すると、バーの左端の窓に出てきます。(既に何らかのマクロが登録されているなら、
[Ctrl]キーを押しながらマウスで選択します。)まずボタンを一つずつ押して、名前を
メモしておきます。次に・・

Sub Set_Action()
  ActiveSheet.Buttons.OnAction = "MyAction"
End Sub

Sub MyAction()
  Dim x As Variant

  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  MsgBox x & " がクリックされました", 64
End Sub

を標準モジュールに入れ、Set_Action を一回だけ実行してから、任意のボタンを
押してみて下さい。押したボタンによって異なった名前がメッセージされることを
確認し、先ほど採ったメモを見ながら MyAction のコードを

Sub MyAction()
  Dim x As Variant

  x = Application.Caller
  If VarType(x) <> 8 Then Exit Sub
  Select Case x
   Case "ボタン 11"
     'ボタン 11が押されたときの処理
   Case "ボタン13"
     'ボタン 13が押されたときの処理
   Case ・・・
 
  End Select
End Sub

というように変更すれば、一つのマクロで複数のボタンに対応する複数の処理が
出来るようになります。
なお「ツール」「マクロ」・・で、リストから MyAction を選んで実行した場合、
Callerプロパティの値のデータ型は文字列になりません。それで"ボタンを押して
実行されたのではない"ということが分かるので、冒頭でVarType関数を使って
データ型を調べているわけです。
3 hits

【36505】フォームボタンなどでのマクロ呼出しでのSUBへの引数 momo 06/4/2(日) 11:40 質問
【36513】Re:フォームボタンなどでのマクロ呼出しで... Kein 06/4/2(日) 12:46 回答
【36923】Re:フォームボタンなどでのマクロ呼出しで... momo 06/4/18(火) 12:49 お礼
【36929】Re:フォームボタンなどでのマクロ呼出しで... Jaka 06/4/18(火) 14:08 発言
【36933】消し忘れた。 Jaka 06/4/18(火) 14:50 発言

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