Abrufen des Textfeldwerts in der Ereignisbehandlungsroutine für Änderungen

Ich habe ein Formular geschrieben, das Abfragen asynchron ausführtals text wird getippt In ein Textfeld wird jedoch scheinbar willkürlich der folgende Fehler ausgegeben: "Sie können nicht auf eine Eigenschaft oder Methode für ein Steuerelement verweisen, es sei denn, das Steuerelement hat den Fokus."

Der unmittelbar relevante Code lautet:

Dim UpdateRequested As Boolean
Dim qryText As String

.
.
.

Private Sub txtBox_Change()
    qryText = txtBox.Text
    UpdateRequested = true
End Sub

Eine Stelle in den Auslassungspunkten ist der Code, der das dynamische Laden eines ADODB-Datensatzes, das Auffüllen einer lokalen Tabelle und das Aktualisieren eines Unterformulars verwaltet. Auch wenn ich diesen Code deaktiviere, besteht das Problem weiterhin: Manchmal wird der Fehler angezeigt. Manchmal mache ich nicht.

Dies scheint beständig zu sein, wenn die Datenbank geschlossen und erneut geöffnet wird. Jedes Mal, wenn es wieder funktioniert, liegt es daran, dass ich im Debugger mit Code herumgespielt habe, aber ich bin nicht sicher, was genau dazu führt, dass es magisch "einfach funktioniert" oder was dazu führt, dass es überhaupt nicht funktioniert.

Aktualisieren

Um die Sache noch rätselhafter zu machen, habe ich ein paar einfache Event-Handler hinzugefügt:

Private Sub txtBox_GotFocus()
    MsgBox "Got focus"
End Sub

Private Sub txtBox_LostFocus()
    MsgBox "Lost focus"
End Sub

Ich führe das Formular aus. Ich klicke in die Testbox. Ich erhalte die Nachricht "Got focus". Sobald ich tippe, sehe ich den Fehler wie oben beschrieben. Wenn ich das Formular erneut öffne, kann ich zwischen dem betreffenden Textfeld (das selbst nicht gebunden ist) und einem gebundenen Textfeld im Unterformular klicken und wie erwartet die Meldungen "Erhaltener Fokus" und "Verlorener Fokus" anzeigen. Wenn Sie ein Meldungsfeld mit dem aktuellen Wert "Screen.ActiveControl.Name" anzeigen, wird der erwartete Name angezeigt, bevor auf die Text-Eigenschaft zugegriffen wird.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage