テキストボックスにテキストが入力されたときに非同期でクエリを実行するフォームを作成しましたが、「コントロールにフォーカスがない限り、コントロールのプロパティまたはメソッドを参照できません」というエラーがスローされるように思われます。
すぐに関連するコードは次のとおりです。
Dim UpdateRequested As Boolean
Dim qryText As String
.
.
.
Private Sub txtBox_Change()
qryText = txtBox.Text
UpdateRequested = true
End Sub
省略記号内のどこかは、ADODB レコード セットの動的な読み込み、ローカル テーブルへの入力、およびサブ フォームの更新を処理するコードです。ただし、このコードを無効にしても問題は解決しません。エラーが発生することがあります。時々私はしません。
これは、データベースを閉じて再度開くことで持続するようです。再び機能し始めるたびに、デバッガーでコードをいじっていたことが原因ですが、正確に何が原因で魔法のように「正常に機能する」のか、またはまったく機能しないのかはわかりません。
アップデート
さらに不可解にするために、いくつかの単純なイベント ハンドラーを追加しました。
Private Sub txtBox_GotFocus()
MsgBox "Got focus"
End Sub
Private Sub txtBox_LostFocus()
MsgBox "Lost focus"
End Sub
フォームを実行します。テストボックスをクリックします。「Got focus」というメッセージが表示されます。入力するとすぐに、上記のエラーが表示されます。フォームを再度開くと、問題のテキスト ボックス (それ自体はバインドされていません) とサブ フォームのバインドされたテキスト ボックスの間をクリックすると、期待どおりに「フォーカスを得ました」メッセージと「フォーカスを失った」メッセージの両方が表示されます。さらに、"Screen.ActiveControl.Name" の現在の値を含むメッセージ ボックスを表示すると、Text プロパティにアクセスする直前に予想される名前が表示されます。