Hallo Zusammen
Ich habe das Problem das eine Function einen Fehler auslöst.
Öffne ich das Formular zuerst im Bearbeitung 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 dass
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.
Hallo,
während des Öffnens eines Formulars erhält das erste Steuerelement den Fokus und damit wird dann auch deine Ereignisroutine angesprungen. Zu dem Zeitpunkt gibt es aber noch kein aktiviertes Steuerelement und deshalb geht der erste Aufruf von Screen.Activecontrol schief.
Hier mußt du dir eine andere Logik einfallen lassen, die deine Ereignisbehandlung erst freischaltet, wenn ein Formular auch sichtbar ist oder du baust eine entsprechende Fehlerbehandlungsroutine ein.
Im übrigen würde ich das eher mit einer Klasse oder einem "Shared Eventhandler" lösen, anstatt jedes mal eine Funktion auszurufen.
Gruß Knobbi38
Hallo Knobi
Danke für deine Antwort.
Das habe ich mir fast gedacht
Da Ich Anfänger bin weis ich nicht wie das mit der Klasse oder dem Shared Eventhandler geht.
Hallo,
im übrigen gibt es für den Zweck auch eine Bedingte Formatierung, dort kannst Du als Regel einstellen, daß das Control aktiv sein muß und welche Formatierung dann einzustellen ist.
Das funktioniert dann ganz ohne Programmierung und ist nicht auf unzuverlässige Referenzen wie "Screen.ActiveControl" angewiesen.
Außerdem:
Private Sub ST_Titel_GotFocus()
BackcolorOn
End Sub
Wenn Du eine Eventfunktion für "GotFocus" hast, dann weißt Du explizit, daß das aktive Control hier "ST_Titel" ist. Also kannst Du, wenn "BackColorOn" wiederverwendbar sein soll, die Referenz einfach übergeben mit "BackColorOn Me.ST_Titel".
Deine Funktion wird dann modifiziert:
Public Function BackcolorOn(ctlTextbox As Access.TextBox)
ctlTextBox.BackColor = QBColor(14) 'Hellgelb
End Function
Ein "SetFocus" ist hier sinnfrei, da Du ja bereits mit "GotFocus" einen Event ausgelöst hast, der besagt, daß der Fokus sich genau hier befindet.
Mit dieser Modifikation erhält die Funktion genau die richtige Referenz, während "Screen.ActiveControl" u.U. auf ein anderes Control verweist, was gerade nicht verfügbar ist.
Gruß
Christian
Hallo,
die Lösung von Christian ist sicherlich in diesem Fall die einfachste und beste Variante. 👍
Alternativ kannst du hier einfach deine Funktion als "Shared Eventhandler" direkt per Ausdruck bei den Textboxen eintragen und aufrufen:
Event.png
Public Function BackcolorOn() As Variant
On Error Resume Next
Screen.ActiveControl.BackColor = QBColor(14) 'Hellgelb
End Function
Übrigens solltest du bei Verwendung des Screen-Objekts immer mit einem Fehler rechnen. Eine minimale Fehlerbehandlung ist dabei also obligatorisch.
Gruß Knobbi38
Hallo Knobbi
Deine Letzte Antwort funktioniert Tadellos
Danke für das schnipped.
Ich habe das qbcolor noch mit RGB(224, 224, 224) ausgetauscht.
Nun Passt es