Forum des Access-Tutorials

Seltsam unterschiedliches Verhalten von Controls (Access)

Nikno, Mittwoch, 19. April 2017, 13:52 (vor 100 Tagen)

Guten Tag zusammen,

ich bin schon länger auf der Suche nach dem Fehler im Code (falls es denn daran liegt), kann ihn aber nicht entdecken.

Um das Problem zu reduzieren nehmen wir ein Formular mit einer TextBox, einer Combobox und einem SubForm, einem Suchen-Button und einem Löschen-Button an. Letzterer soll die beiden Boxen leeren und das SubForm auf eine Standardansicht zurückbringen.

Dazugehöriger Code:

Private Sub cmdLoeschen_Click()
    Dim ctl As Control
    For Each ctl In Me.Controls
        If TypeOf ctl Is ComboBox Or TypeOf ctl Is TextBox Then
            ctl.Value = ""
        End If
    Next ctl
    Me!subfrm.SourceObject = "frmA"
    Me!subfrm.Form.RecordSource = SELECT * FROM tbl
End Sub


Dieser Code funktioniert wunderbar, wenn man in der Combobox einen Eintrag auswählt, auf den Suchen-Knopf drückt und dann mit dem Löschen-Knopf alles zurücksetzt. Macht man genau dasselbe mit der TextBox, also man gibt einen Text (hier eine Zahl) ein, sucht, und klickt dann auf "Löschen", so erhalte ich den Fehler:
Fehler 2467 In dem von Ihnen eingegebenen Ausdruck wird auf ein Objekt verwiesen, das geschlossen oder nicht vorhanden ist.

Im Code werden eigentlich beide Kontrollelemente gleich behandelt, ich bin ratlos.

Seltsam unterschiedliches Verhalten von Controls

Martin Asal, Mittwoch, 19. April 2017, 15:13 (vor 100 Tagen) @ Nikno

Hallo Nikno,

ich habe das nicht nachgebaut. In welcher Codezeile steckt denn der Fehler?

Falls es folgende ist:

If TypeOf ctl Is ComboBox Or TypeOf ctl Is TextBox Then

dann wäre es interessant zu sehen, was passiert, wenn du die Reihenfolge umdrehst:

If TypeOf ctl Is TextBox Or TypeOf ctl Is ComboBox Then

Möglicherweise tritt der Fehler dann nicht mehr mit dem Textfeld, sondern der Combobox auf? Beim Auswerten der Zeile sagt sich Access nämlich (wenn es wirklich daran liegt); wenn die Bedingung vor dem "or" schon erfüllt ist, brauche ich danach nicht mehr auswerten.

Martin

Seltsam unterschiedliches Verhalten von Controls

Nikno, Mittwoch, 19. April 2017, 15:39 (vor 100 Tagen) @ Martin Asal

ich habe das nicht nachgebaut. In welcher Codezeile steckt denn der Fehler?

Das sollte man natürlich noch erwähnen. Es ist die letzte Zeile. Es muss nicht die Anweisung sein, alles was mit dem Formular des Unterformularsteuerelement zu tun hat, gibt einen Fehler aus.

Möglicherweise tritt der Fehler dann nicht mehr mit dem Textfeld, sondern der Combobox auf? Beim Auswerten der Zeile sagt sich Access nämlich (wenn es wirklich daran liegt); wenn die Bedingung vor dem "or" schon erfüllt ist, brauche ich danach nicht mehr auswerten.

Leider nein, daran lag es nicht. Sofern ich weiß, optimiert VBA den Code auch nicht und führt die If-Bedingung vollständig aus, auch wenn sie schon erfüllt/nicht erfüllt ist, was mich öfter zu hässlichen Verzweigungen bringt.

Gibt's sonst noch eine Idee? :)

Seltsam unterschiedliches Verhalten von Controls

Martin Asal, Mittwoch, 19. April 2017, 15:43 (vor 100 Tagen) @ Nikno

Recordsource muss ein String sein, da fehlen die Gänsefüßchen

Martin

Seltsam unterschiedliches Verhalten von Controls

Nikno, Mittwoch, 19. April 2017, 16:23 (vor 100 Tagen) @ Martin Asal

War n Tippfehler, ist nicht das Problem.

Seltsam unterschiedliches Verhalten von Controls

PhilS ⌂, Mittwoch, 19. April 2017, 17:15 (vor 100 Tagen) @ Nikno

Anweisung sein, alles was mit dem Formular des Unterformularsteuerelement zu tun hat, gibt einen Fehler aus.

Nur mal ins Blaue geraten: Kann es sein, dass das Unterformular über das Textboxcontrol mit dem Hauptformular verknüpft ist? - Es kann auch sein, dass Access diese Verknüpfung automatisch herstellt, wenn es ein namenlich übereinstimmendes Feld im neu eingesetzten UFO gibt.

Seltsam unterschiedliches Verhalten von Controls

Nikno, Mittwoch, 03. Mai 2017, 11:52 (vor 86 Tagen) @ PhilS

Hallo,

vielen Dank für den Einfall. Es gibt tatsächlich im Unterformular ein Steuerelement mit demselben Namen. Wenn ich dies aber zum Beispiel lösche, funktioniert es trotzdem nicht.

Seltsam unterschiedliches Verhalten von Controls

PhilS ⌂, Mittwoch, 03. Mai 2017, 12:55 (vor 86 Tagen) @ Nikno

Es gibt tatsächlich im Unterformular ein Steuerelement mit demselben Namen. Wenn ich dies aber zum Beispiel lösche, funktioniert es trotzdem nicht.

Vielleicht wird die problematische Verknüpfung auch schon über Tabellenfelder hergestellt.
Hat das UFO eine Recordsource wenn es eingebunden wird?
Evtl. Solltest du die LinkMasterFields und LinkChildFields explizit per code löschen, nachdem du das UFO eingebunden hast.

Seltsam unterschiedliches Verhalten von Controls

Nikno, Mittwoch, 03. Mai 2017, 13:09 (vor 86 Tagen) @ PhilS

Vielen Dank für die Hilfe!

Wenn ich die Verknüpfungen vor dem Einbinden des Ufos lösche, funktioniert es! Du bist wirklich immer eine super Unterstützung! :-)

RSS-Feed dieser Diskussion
RSS Einträge  RSS Threads   Kontakt
powered by my little forum