- ベストアンサー
ユーザフォームの押下コマンドボタンの区別は?
Excel2007のVBAについて質問します。初心者です。 コマンドボタンが2個あるユーザフォームを表示します。それぞれのボタンが押されると対応する処理をして制御がユーザフォームを表示した直後に戻るようになっています。 このとき、どちらのボタンが押されたのか区別する方法をご教示頂きたくよろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「ボタンが押された」なるプロパティはありません。 たとえば回答済みの方法1を応用してみると 標準モジュール public flg sub macro1() load userform1 userform1.show msgbox flg end sub ユーザーフォームのモジュール private sub commandbutton1_click() flg = "button1" me.hide end sub private sub commandbutton2_click() flg = "button2" me.hide end sub などのようになりますが?
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
いつどこで(どのプロシジャで?というイミです)判りたいのか,どうも要領を得ないご相談です。 いずれにしても,「どこかに」このボタンを実行したよと記録を取っておくのが一番簡単な方法です。 作成例:共通記録 dim flg as string private sub commandbutton1_click() flg = "button1" end sub private sub commandbutton2_click() flg = "button2" end sub 作成例:共通記録2 private sub commandbutton1_click() worksheets("hiddenRecord").range("A1") = "commandbutton1" end sub private sub commandbutton2_click() worksheets("hiddenRecord").range("A1") = "commandbutton2" end sub private sub userform_terminate() worksheets("hiddenRecord").range("A1").clearcontents end sub 作成例:別のプロシジャにネタを渡す private sub commandbutton1_click() call commonproc("button1") end sub private sub commandbutton2_click() call commonproc("button2") end sub private sub commonproc(a) msgbox a end sub 作成例:見て区別できる private sub commandbutton1_click() commandbutton1.forecolor = rgb(255, 0, 0) commandbutton2.forecolor = rgb(0, 0, 0) enh sub private sub commandbutton2_click() commandbutton1.forecolor = rgb(0, 0, 0) commandbutton2.forecolor = rgb(255, 0, 0) enh sub
補足
早速回答頂きありがとうございます。 コマンドボタンのクリックイベントプロシジャが終了するとユーザフォームを表示した直後、例えば UserForm1.Show の次のステートメントに制御が渡されますので、そこで押されたコマンドボタンを判断したいのですが。 典型的なスマートな方法があればと質問させて頂きました。表示したユーザフォームのプロパティで判断する方法とかはあるのでしょうか?
お礼
グローバル変数を使用するのが嫌なので次の方法を取りました。 一方のボタンの処理後はユーザフォームが不要なので、そのボタンクリックイベントプロシジャ終了直前で Unload し、ユーザーフォームオブジェクトの存在有無で判定するようにしました。 度々ご回答頂きありがとうございました。