- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA Application.Caller値変更)
VBAのApplication.Caller値変更方法
このQ&Aのポイント
- Excel VBAのApplication.Callerで得られる値を変更する方法について解説します。
- Excel VBAのApplication.Callerで得られるボタン名が分かりづらい場合、任意の名前に変更する方法について説明します。
- UserForm上のボタンから呼び出されるサブルーチン内で、Application.Callerの値を変更して表示されるボタン名を任意の名前に設定する方法について解説します。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
ご相談に書かれた「実行」マクロを、いったい「何から」呼び出しているのでしょうか。 >UserForm1上のボタン1と、UserForm2上のボタン2から、 >同じサブルーチン(下記)を呼び出しております。 UserForm上に配置した「コマンドボタン」から呼び出しても、application.callerが「ボタン9」などを返すことはありません。エラー値が返るだけです。 また「同じ実行マクロを2つのボタンから呼び出している」というご説明も、UserFormにボタンを配置しているという状況とは明らかに整合しません。 ご相談の状況からは、「実行」マクロがユーザーフォームからではなく、たとえばワークシート上に配置したフォームのコマンドボタンだとかに登録されているといった状況が推測されます。 このご質問は一回解決で閉じ、いったい「何に登録したマクロ」を実行しているのか、正しい状況を添えてご相談を書きなおし改めて投稿し直して頂くのが良いでしょう。 #一応念のため >メッセージボックスで「ボタン348」と表示されます。 マクロを登録した図形の名称が「ボタン348」です。 例えばワークシート上に配置したボタンであれば、名前ボックスに表示される図形の名前がapplication.callerで取得されます。 繰り返しますがUserFormに配置したコマンドボタン等から呼び出しても、ボタンの名称を取得する事はできません。
お礼
keithin様 どうもありがとうございます!m(_ _)m 過去にも何度も助けていただいております。 ご指摘いただいた後に色々と検証いたしましたが、お陰で面白い事に気づく事ができました。 >UserFormに配置したコマンドボタン等から呼び出しても、ボタンの名称を取得する事はできません。 についてでございますが、 Sheet1上のボタン(ボタン名 = ボタン 1)からUserForm1呼び出し → UserForm1上のボタンから Sub ボタンUF1_Click() Call Thisworkbook.Caller表示 End Sub を実行。 そして、ThisworkBook側のコードが Sub Caller表示 MsgBox (Application.Caller) End Sub の際は、仰られる通り何も取得されませんでしたが、 Sub Caller表示 押されたボタン名 = Application.Caller MsgBox (押されたボタン名) End Sub のようにしてやると、UserForm1上のボタン名ではなくSheet1上のボタン名がそのまま取得できました。(Form上のボタンから実行しておりますにも関わらず。^^;) 一度Stringに入れてやる(?)とこのような現象になるのでございましょうか。。。? >「同じ実行マクロを2つのボタンから呼び出している」というご説明も、UserFormにボタンを配置しているという状況とは明らかに整合しません。 につきましては、 Sheet1の場合と全く同様に、Sheet2上のボタン(Caller = ボタン 2)からUserForm2を呼び出し UserForm2上のボタンから Sub ボタンUF2_Click() Call Thisworkbook.Caller表示 End Sub を実行しておりました。(説明が不足しており大変申し訳御座いませんでした。。。) 従い本件は「Sheet1上のボタン名とSheet2上のボタン名を、添付いただいた画像の左上のボックスから変更する」で解決できそうでございます。 この度はご親切にご閲覧・アドバイス頂き誠にありがとうございました!!m(_ _)m