- ベストアンサー
[Q:VBA] 現在のオブジェクトの参照(JavaScriptのthisキーワードに相当するもの)
こんにちは。 Excel VBAで現在のオブジェクトの参照をすることはできますでしょうか?(JavaScriptのthisキーワードに相当するものはあるのでしょうか?) 下記のようなことをしたいのですが(コード自体に意味はありません。検証用です)。 よろしくお願い致します。 -- Private Sub CommandButton1_Click() キャプション = CommandButton1.Caption MsgBox(キャプション) End Sub Private Sub CommandButton2_Click() キャプション = CommandButton2.Caption MsgBox(キャプション) End Sub ・・・×数十個 ↓↓↓ Private Sub CommandButton1_Click() funcCaption End Sub Private Sub CommandButton2_Click() funcCaption End Sub ・・・×数十個 Sub funcCaption() キャプション = this.Caption MsgBox(キャプション) End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 フォーカスを持っているコントロールを参照する、ActiveControlというプロパティがあります。 Sub funcCaption() キャプション = ActiveControl.Caption MsgBox(キャプション) End Sub という感じで出来ると思います。
その他の回答 (2)
もしくは、こんな書き方も。 Private Sub CommandButton1_Click() Call funcCaption( CommandButton1 ) End Sub Private Sub CommandButton2_Click() ' またはこんな書き方 funcCaption CommandButton2 End Sub Private Sub funcCaption( This As Control ) MsgBox This.Caption End Sub
- osamuy
- ベストアンサー率42% (1231/2878)
maruru01さんが解答しているので、これは蛇足です。 VBとかVBAの場合、現在のオブジェクトを表すのは、「Me」ですが、イベントハンドラはフォームに定義されますので、そのハンドラが、ボタンコントロールのものであっても、Meは、そのボタンが乗っているフォームになります。 VB.Netでどうなっているかは試した事無いので謎。
お礼
お返事が遅くなりすみません。 みなさんご回答ありがとうございます。 まさにActiveControlで解決できました! ありがとうございました。 VB,VBSではMeなのですか~? 違うと困りますね~。 temtecomaiさんの方法も面白いですが、 2回「CommandButton1」と書くのを控えたかったので、 今回はActiveControlでやりました。 ありがとうございました!