※ ChatGPTを利用し、要約された質問です(原文:なぜエラーになるのでしょう?アクティブコントロール)
なぜエラーになるのでしょう?アクティブコントロール
このQ&Aのポイント
フォーム1の中にフォーム2を入れてサブフォームとしてフォーム2の中にコマンドボタンを一つ置いた場合、コマンドボタン名を取得する方法について教えてください。
フォームの数が多いため、フォームモジュールに「アクティブコントロール名を取得する」関数を作成し、標準モジュールにコードを書いています。しかし、コマンドボタン名を取得する処理でエラーが発生してしまいます。
サブフォームのコントロールから発信したイベントで、サブフォームのコントロールの値が取得できない問題が発生しています。解決策を教えてください。
なぜエラーになるのでしょう?アクティブコントロール
ちょっと変なやり方かもしれないのですが、都合上こうやりたいので教えてください。
フォーム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ファイルではコマンドボタンではなくテキストです。
ご回答よろしくお願いします。
お礼
ACCESS です。 Screen.ActiveControl.Nameでできました。ありがとうございました。勉強になりました。