
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- Excel(エクセル) excelvbaのenableeventsについて 3 2022/08/30 11:20
- Android(アンドロイド) スマホ chromeの戻るボタンが機能しにくい スマホ(OPPO reno5A、Android12) 1 2022/09/11 20:39
- Visual Basic(VBA) Powerpointでランダムな数字の結果を表示するマクロ 2 2023/08/04 10:04
- Word(ワード) Word のマクロについての質問です。 ボタンを押すと登録したブックマーク先にジャンプする機能(リン 3 2023/08/16 12:17
- iPhone(アイフォーン) Iphone 13 pro maxが急に動かなくなった際の対処法 2 2023/08/15 02:08
- 教えて!goo 質問をして回答者さんにお礼文を書こうとしても、お礼のカウントを押すボタンだけは表示されて、それ以外の 1 2022/07/26 10:19
- スピーカー・コンポ・ステレオ Razer Nommo Chroma という外部スピーカーを使ってるのですが 電源が入らなくて困って 3 2022/08/07 20:04
- 画像編集・動画編集・音楽編集 Windowsに付属しているビデオエディター。BGMを追加する方法は? 1 2022/06/26 08:54
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UPS警告音を止めたい
-
Excelシート上のマクロを登録し...
-
【Excel VBA】マクロボタンを表...
-
マクロを登録しているボタンが...
-
EXCELのマクロが 実行時エラー5...
-
EXCELでボタンによりスク...
-
エクセルの画面にユーザーフォ...
-
入力済み、選択したセルに連動...
-
オブジェクト名をVBAで指定...
-
Excelで、ボタンにコメントをつ...
-
Excel ラジオボタンのリセット...
-
フォームコントロールから作っ...
-
マクロで作ったボタンのサイズ...
-
エクセルで、オプションボタン...
-
【Excel2003】コマンドボタンの...
-
Accessのフォームでタブの色
-
Accessについてです。
-
VBAでクリアボタンのみ残してシ...
-
【Excel】難しいのですが、献立...
-
日報の休日ボタン(トグルボタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelシート上のマクロを登録し...
-
【Excel VBA】マクロボタンを表...
-
UPS警告音を止めたい
-
エクセルの画面にユーザーフォ...
-
マクロを登録しているボタンが...
-
EXCELのマクロが 実行時エラー5...
-
複数シートのボタンに同一の動...
-
入力済み、選択したセルに連動...
-
フォームコントロールから作っ...
-
Excelで、ボタンにコメントをつ...
-
Excel ラジオボタンのリセット...
-
エクセルで、オプションボタン...
-
マクロで作ったボタンのサイズ...
-
オブジェクト名をVBAで指定...
-
エクセルでマクロボタンを押す...
-
Accessのフォームでタブの色
-
excel スクロールしても常にボ...
-
ユーザーフォームをショートカ...
-
EXCELの塗りつぶしのボタ...
-
パナソニックKX-PW22CLHの電話...
おすすめ情報