• ベストアンサー

[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

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 フォーカスを持っているコントロールを参照する、ActiveControlというプロパティがあります。 Sub funcCaption() キャプション = ActiveControl.Caption MsgBox(キャプション) End Sub という感じで出来ると思います。

その他の回答 (2)

noname#102878
noname#102878
回答No.3

もしくは、こんな書き方も。 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

noname#27709
質問者

お礼

お返事が遅くなりすみません。 みなさんご回答ありがとうございます。 まさにActiveControlで解決できました! ありがとうございました。 VB,VBSではMeなのですか~? 違うと困りますね~。 temtecomaiさんの方法も面白いですが、 2回「CommandButton1」と書くのを控えたかったので、 今回はActiveControlでやりました。 ありがとうございました!

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

maruru01さんが解答しているので、これは蛇足です。 VBとかVBAの場合、現在のオブジェクトを表すのは、「Me」ですが、イベントハンドラはフォームに定義されますので、そのハンドラが、ボタンコントロールのものであっても、Meは、そのボタンが乗っているフォームになります。 VB.Netでどうなっているかは試した事無いので謎。

関連するQ&A

専門家に質問してみよう