こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

なぜエラーになるのでしょう?アクティブコントロール

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

フォーム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ファイルではコマンドボタンではなくテキストです。
ご回答よろしくお願いします。

投稿日時 - 2013-01-28 20:03:28

QNo.7915951

困ってます

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

ACCESS で良かったでしょうか


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

Screen.ActiveControl.Name

で名前が得られると思います。

投稿日時 - 2013-01-28 21:14:05

お礼

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

投稿日時 - 2013-01-29 21:24:24

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問