Fehler 2474 abfangen beim direkten Öffnen von Formular

Anonym
2025-04-20T11:12:02+00:00

Hallo Zusammen.

Ich habe das Problem, dass eine Funktion einen Fehler auslöst.

Öffne ich das Formular zuerst im Bearbeitungs-Modus und wechsle dann in den Formular-Modus, klappt alles.
Öffne ich das Formular direkt, bekomme ich diesen Fehler.

Laufzeitfehler '2474':

Für den von Ihnen eingegeben Ausdruck ist es erforderlich, dass sich das

Steuerelement im aktiven Fenster befindet.

Was löst diesen Fehler aus:

Ich habe 2 Funktionen in einem Modul.

Diese werden im Formular mit folgendem Code aktiviert und deaktiviert:

Private Sub ST_Titel_GotFocus()

Call BackcolorOn

End Sub

Private Sub ST_Titel_LostFocus()

Call BackcolorOff

End Sub

Im Modul:

Public Function BackcolorOn()

With Screen.ActiveControl

.BackColor = QBColor(14) 'Hellgelb

.SetFocus

End With

End Function

Public Function BackcolorOff()

With Screen.ActiveControl

.BackColor = QBColor(15) 'weiss

.SetFocus

End With

End Function

Dies funktioniert auch toll, solange das Fenster über einen Umweg geöffnet wird.

Auf welchem Weg kann ich diesen Fehler abfangen? Hat da jemand eine Idee?

Microsoft 365 und Office | Access | Für Zuhause | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2025-04-20T19:06:35+00:00

Hallo!

Das ist eines der Timing-Probleme beim Öffnen von Formularen. Der Workaround, den ich üblicherweise vorschlage, ist ein Timer:

  1. Entferne den Aufruf von "BackcolorOn" aus dem GotFocus des ersten Steuerelementes im Formular, das den Fokus bekommt, also ST_Titel.
  2. Stelle die Eigenschaft Zeitgeberintervall des Formulares auf 100.
  3. In der Ereigniseigenschaft Bei Zeitgeber schreibst du 2 Zeilen Code:

Call BackcolorOn

Me.TimerInterval = 0

Also zuerst der (leicht verzögerte) Aufruf und danach das Ausschalten des Timers.

BTW1: Wenn deine Funktionen keinen Rückgabewert haben, könnten sie wahrscheinlich auch Subprozeduren sein.

BTW2: Das SetFocus in deinen Funktionen sieht überflüssig aus, denn es bezieht sich auf ActiveControl, d.h. das Steuerelement mit dem Fokus.

Servus
Karl
****************
Access Forever, News, DevCon
Access-Entwickler-Konferenz AEK

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare

1 zusätzliche Antwort

Sortieren nach: Am hilfreichsten
  1. Anonym
    2025-04-21T06:15:19+00:00

    Hallo Karl,

    Dein erster Teil mit dem Zeitgeber hat funktioniert.

    Ich habe dann noch herausgefunden, dass es einen anderen Weg gibt.

    Das erste Feld darf kein Feld sein, das diesen Farb-Aufruf hat.
    Also habe ich das Anhang-Feld, das diesen Aufruf nicht besitzt, als erstes gemacht.
    Danach habe ich ein Formular-Menü gemacht mit einem Button zum Öffnen.

    Private Sub Befehl0_Click()

    DoCmd.Close

    DoCmd.OpenForm "FRM_ST_data"

        Forms!FRM\_ST\_data!ST\_Database.SetFocus 
    
        Forms!FRM\_ST\_data!ST\_Titel.SetFocus 
    

    End Sub

    Darin rufe ich zuerst das Feld ST_Database auf, das keinen Call BackcolorOn besitzt.

    Danach springe ich zum Feld ST_Titel, das den Befehl Call BackcolorOn besitzt.

    Im Formular setzte ich die Reihenfolge der Felder auf

    1. ST_Datenbase
    2. ST_Titel

    Dann klappt der Aufruf.

    BTW2 habe ich auch umgesetzt und das .setfocus auskommentiert. Funktioniert einwandfrei.

    Bei Zeitgeber habe ich dann folgenden Code:

    Private Sub Form_Timer()

    Me.ST_Database.SetFocus

    Me.ST_Titel.SetFocus

    Me.TimerInterval = 0

    End Sub

    So funktioniert es ohne Fehler-Meldungen, egal ob das Formular direkt geöffnet wird oder über einen Button.

    Danke Karl, für deinen Beitrag.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare