A03: Anwendungs- oder objektdefinierter Fehler

29/11/2007 - 13:24 von Rüdiger Gram | Report spam
Hallo NG,

ich plage mich mit einer Fehlermeldung herum, für die ich keine Abhilfe
weiß.

Function Feldhintergrund_zurücksetzen(Formular As Form)

If Screen.ActiveControl.Name <> Formular.Datensatzsuchfeld.Name Then

Dim ctl As Control
For Each ctl In Formular.Controls
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
If ctl.BackColor <> vbWhite Then ctl.BackColor = vbWhite
End If
Next

End If

Die Zeile:

If Screen.ActiveControl.Name <> Formular.Datensatzsuchfeld.Name Then ...

bringt die Fehlermeldung: Anwendungs- oder objektdefinierter Fehler

Was ist an dem Code falsch?

Gruß

Rüdiger
 

Lesen sie die antworten

#1 Henry Habermacher
29/11/2007 - 13:38 | Warnen spam
Hallo Rüdiger

Rüdiger Gram wrote:
ich plage mich mit einer Fehlermeldung herum, für die ich keine Abhilfe
weiß.

Function Feldhintergrund_zurücksetzen(Formular As Form)

If Screen.ActiveControl.Name <> Formular.Datensatzsuchfeld.Name Then

Dim ctl As Control
For Each ctl In Formular.Controls
If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
If ctl.BackColor <> vbWhite Then ctl.BackColor = vbWhite
End If
Next

End If

Die Zeile:

If Screen.ActiveControl.Name <> Formular.Datensatzsuchfeld.Name Then ...

bringt die Fehlermeldung: Anwendungs- oder objektdefinierter Fehler




Zwei Dinge. Zum ersten:

Passiert mir auch immer wieder. Scheinbar ist das Screen.ActiveControl kein
vollwertiges kontroll, sondern nur so eine Control Referenz. Wenn Du das
Control richtig benutzen willst, musst Du folgendes machen:

Function Feldhintergrund_zurücksetzen(frm As Form)
Dim ctlActive as Control
Set ctlActive = Screen.ActiveControl
If ctlActive.Name <> "Datensatzsuchfeld" Then
Dim ctl As Control

Dann noch die unglückliche Verwendung des Variablennamens "Formular". Das
würde ich nicht machen. Verwende besser eine vernünftige Benamsung gemàss
FAQ und in diesem fall z.B. frm.

Im übrigen wird frm.Datensatzsuchfeld.Name wohl einfach "Datensatzsuchfeld"
zurückliefern. Wieso also so umstàndlich? Du könntest ja auch richtig
ausgeschrieben frm.Controls("Datensatzsuchfeld").Name verwenden, wobei das
in der Klammer eben der Name des Controls ist. Also vergleiche doch einfach
den Namen mit dem Namen.

Gruss
Henry


Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen