![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
excel2003を使っています。
結構マクロは書くので、ボタンが貼られています。
このボタンが押されたときに、
どのボタンが押されたかで処理を分けてみたいと考えています。
ズバリ、どのボタンが押されたかを把握したいのです。
質問までの経緯ですが、
調べたところ、ワークシートイベントで「change」というのが在りますが、
シートの何処かが変わる必要があり、
ボタンを押しただけではイベントが起きません。
解決方法として考えられるのが、
各ボタンで本来のマクロを動かす時の最後に、
自分のIDを何処か決められたセルに置けば可能です。
これをやらずに、
(まさにイベントが起きたように)標題を解決する方法はありませんでしょうか。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
各ボタンのマクロに組み込む方法がベストだと思いますよ。
例えば、https://umeyalabo.com/application-caller のマクロで
Sub ボタン1_Click()
Range("A3") = Range("A3") + 1
ボタンの文字を判定
End Sub
Sub ボタン2_Click()
Range("A5") = Range("A5") + 1
ボタンの文字を判定
End Sub
Private Sub ボタンの文字を判定()
Dim Button_Text As String
'押されたボタンの文字を判定
Button_Text = Worksheets(1).Buttons(Application.Caller).Text
If Button_Text = "新規" Then
MsgBox "新規ボタンが押されました。"
ElseIf Button_Text = "更新" Then
MsgBox "更新ボタンが押されました。"
End If
End Sub
のように、各ボタンでそれぞれのマクロの最後(End Sub直前など)に
「ボタンの文字を判定」を組み込めば、どれかのボタンを押すたびに、
「ボタンの文字を判定」マクロも一緒に実行されるのですから。
わざわざコードまで頂き恐縮です。
本件は、貼っていただいたページの通り、
また今回書いていただいた通りが「これから作るのでしたら」ベスト、
は理解しております。
最初から書かなかったのがご迷惑を掛けてしまった原因ですが、
現在、何個もマクロの引き金ボタンが在るブックに在ることが必要で手を入れなくてはならなかったのです。
なので、一つのプロシージャーでと思っています。
結局は出来ないので、もう少し考えますが、
最終的には教えのように汎用procを作り、
片っ端から入れていくこととなるかもしれません。
兎に角、
今回はcallerを学びました。
さらにお手間を掛けてしまい申し訳ありませんでした。
これを持ってクローズさせていただきます。
毎回ですが、大変お世話になりました。
No.3
- 回答日時:
たぶん、イベント処理で取得するよりApplication.Callerで処理した
ほうが、希望していることをするのに向いていると思いますよ
https://vbae.odyssey-com.co.jp/column4/s41402.html
https://umeyalabo.com/application-caller
何時もお世話になっております。
また、今回も的確な回答、ありがとうございました。
ただ、残念ながら、callerで方向はずばりなのですが、
これ自体の引き金をイベントにならないかというのが今回の要求なのです。
言ってみれば、
本件のcallerを動かすためにも何らかの引き金が必要です。
そのためにボタンを押したり、
それぞれの(現在動いている)マクロに引き金を組み込むことはしたくなく、
例えばに書いたように、
ワークシートイベント「change」のように、
何らかのボタンが押されたらそれを頼りに、ある動作を起こしたい、
ということです。
changeでもほぼ満足できるのですが、
changeではシートが幾らかでも動かなければトリガが引かれません。
今動いているマクロの中にはカウンターの更新だけが在り、
この場合は、イベントの引き金が起きません。
ということで、
今一つそこまで行っていますが、
という段階です。
No.2
- 回答日時:
こんにちは
なさりたい事が良く分からないのですが、
>ボタンを押しただけで発生するイベントは無いか
何のボタンを指しているのか不明ですが、ボタン作成時に付けたマクロ名が実行トリガです。または、CommandButton?_Clickがイベントです。
シート上に作成されたシェイプボタンであればボタンにマクロを登録しないとイベントは無いです。
UserForm上であるならCommandButton?_Clickがイベントです。
>ボタンを押しただけではイベントが起きません。
? イベントとはVBAの実行トリガを指しているのではないのでしょうか?
ボタンをトリガーとするには、そのボタンにマクロを登録すれば良いだけでは?
>どのボタンが押されたかで処理を分けてみたいと考えています。
これだけなら、各ボタンに実行したいプロシージャを登録すれば良いだけ
どのボタンか知りたければ押したオブジェクト名を取得すれば良い
1つのボタンでユーザーによって処理を分けたいと言う事でしょうか?
そうであるなら、やり方は色々あります。
Excelを使用するPCやWindowsのアカウントが違うなら
Private Sub Workbook_Open()時に
CreateObject("WScript.Network")を取得して
Static変数に代入して使用するとか、、
もし、Excelを使用するPCやWindowsのアカウントが同じなら
あらかじめUserFormにパスワードやIDを求めるTextBoxなどを配置したものを作成しPrivate Sub Workbook_Open()時にUserFormを呼びStatic変数に代入して使用するとか、、
Static変数の使い方としてはFunction に分岐処処理などを書いて
プロシージャ実行時にFunctionを呼ぶとか、、、
>調べたところ、ワークシートイベントで「change」というのが在りますが、シートの何処かが変わる必要があり、ボタンを押しただけではイベントが起きません。
確かに、
しかしボタンに (例として同じシートモジュールに)
Sub test()
Call Worksheet_Change(Range("A1"))
End Sub
を登録
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox ("Changeイベントが実行されました")
End Sub
実行出来ます。。。しかし、
上記のコードは下記の様にするべき(ボタンからもChangeイベントからも同じプロシージャが実行されます)
Sub Button() 'ボタンに登録
Call Sample
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Call Sample
End Sub
Sub Sample()
MsgBox ("OK")
End Sub
>excel2003
正しく動く保証がないのでこの辺で
早速ありがとうございました。
ボタンとは、
プロジェクトの中で仕事をさせているマクロを起動するためのボタンです。
フォームの中で作ったボタンとか、コマンドボタンではありません。
単純に、シートに貼ったマクロ引き金のボタンです。
ということで、こまごまと書いていただきましたが、
申し訳ありませんでした。
No.1
- 回答日時:
ここ何年も仕事をしないので忘れましたが、企業にアプリを納入していました。
企業はExcel がベースなので、複雑な動作や特殊な依頼にはVBAで作成しました。操作画面もWindows の画面と同じように作れますのでお勧めです。お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UPS警告音を止めたい
-
Excelシート上のマクロを登録し...
-
EXCELの塗りつぶしのボタ...
-
【Excel VBA】マクロボタンを表...
-
パナソニックKX-PW22CLHの電話...
-
Excel ラジオボタンのリセット...
-
エクセルのチェックボックスと...
-
ユーザーフォームをショートカ...
-
マクロで作ったボタンのサイズ...
-
【Excel】行移動ボタンを沢山作...
-
エクセルで、オプションボタン...
-
マクロを登録しているボタンが...
-
フォームコントロールから作っ...
-
Excelで、ボタンにコメントをつ...
-
Access VBAでボタンの背景色を...
-
エクセルで質問です。
-
エクセルの画面にユーザーフォ...
-
ボタンを押しただけで発生する...
-
excel スクロールしても常にボ...
-
Accessのフォームでタブの色
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
UPS警告音を止めたい
-
エクセルの画面にユーザーフォ...
-
【Excel VBA】マクロボタンを表...
-
ユーザーフォームをショートカ...
-
Excel ラジオボタンのリセット...
-
フォームコントロールから作っ...
-
エクセルで、オプションボタン...
-
Accessのフォームでタブの色
-
複数シートのボタンに同一の動...
-
マクロを登録しているボタンが...
-
Excelで、ボタンにコメントをつ...
-
マクロで作ったボタンのサイズ...
-
excel スクロールしても常にボ...
-
EXCELの塗りつぶしのボタ...
-
VBAでオプションボタンなどそれ...
-
EXCELのマクロが 実行時エラー5...
-
マクロ初心者です。 msgboxのre...
-
VBAでクリアボタンのみ残してシ...
-
Access VBAでボタンの背景色を...
おすすめ情報