プロが教えるわが家の防犯対策術!

ちょっと変なやり方かもしれないのですが、都合上こうやりたいので教えてください。

フォーム1の中にフォーム2を入れてサブフォームとして
フォーム2の中にコマンドボタンを一つ置きました。

そのコマンドボタンを押した時に、そのコマンドボタン名を取得したいのですがうまくできません。

フォームは20個ぐらいあってこれと同じ動きをしたいので、
フォームモジュールには
Private Sub コマンド0_Click()
Call アクティブコントロール名を取得する
End Sub
として、
標準モジュールにコードは書いています。

Sub アクティブコントロール名を取得する()
Dim フォーム As String
フォーム = Screen.ActiveForm.Name

MsgBox "アクティブコントロール名" & Forms(フォーム).ActiveControl.Caption
End Sub
にすると、オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)になります。

そもそも、フォーム = Screen.ActiveForm.Nameの時点で、フォーム1になっています。
実際のコマンドボタンはフォーム2にあるのに。

なので、無理矢理
MsgBox "アクティブコントロール名" & Forms("フォーム2").ActiveControl.Caption
にしたら、

実行時エラー2450
マクロの式またはVisualBasicコードで参照されている'フォーム2'が見つかりません。

という違うエラーになりました。

Sub アクティブコントロール名を取得する()
Dim フォーム As String
フォーム = Screen.ActiveForm.Name

Forms("フォーム2").SetFocus
MsgBox "アクティブコントロール名" & Forms("フォーム2").ActiveControl.Caption
End Sub

にすればいいのかな?と思ったら
Forms("フォーム2").SetFocusでアウトでした。

もともとはサブフォームのコントロールから発信したイベントなのに、
サブフォームのコントロールの値が取れないのでしょうか?

実際のmdbファイルではコマンドボタンではなくテキストです。
ご回答よろしくお願いします。

「なぜエラーになるのでしょう?アクティブコ」の質問画像

A 回答 (1件)

ACCESS で良かったでしょうか




スクリーン上のアクティブコントロールなので

Screen.ActiveControl.Name

で名前が得られると思います。
    • good
    • 0
この回答へのお礼

ACCESS です。
Screen.ActiveControl.Nameでできました。ありがとうございました。勉強になりました。

お礼日時:2013/01/29 21:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A