PDA

Vollständige Version anzeigen : Übergabe von Unterformularen


tfischer
02.06.2003, 11:17
Hallo!

Ich habe ein zentrale Funktion, die mir sämtliche in Formularen enthaltene Textfelder validieren soll.
Diese Funktion ermittelt alle im Formular enthaltenen Textfelder und vergleicht diese mit Werten in einer Liste, die die Mussfelder enthällt.

For Each strCtlName In avarCtlList
If IsNull(Forms!frmMain(strCtlName).Value) Then
Forms!frmMain(strCtlName).BackColor = lngRot
validFormCheck = False
'Me.txtStatus = "Pflegen Sie bitte die gekennzeichneten Felder!"
Else
Forms!frmMain(strCtlName).BackColor = lngDefault
End If
Next strCtlName

Ich würde gern diese Zeile

If IsNull(Forms!frmMain(strCtlName).Value) Then...

noch allgemeingültiger machen und der Funktion den Namen der Form übergeben (jetzt immer frmMain).
Das Übergeben der Form an die Funktion ist kein Problem, aber wie muss diese Zeile dann aussehen, dass "FormName_als_Variable" nicht zu einer Fehlermeldung führt?
If IsNull(Forms!FormName_als_Variable(strCtlName).Value) Then...

Vielen Dank, Thomas

erwin
02.06.2003, 11:33
du solltest nicht den Namen, sondern das Formular-Objekt selbst a.d. Fu. übergeben - dh.:

Public Function blabla(pFrm as Access.Form) as boolean
....
for each ctl in pFrm.controls
....

ansonsten klappt dein Konstrukt sowieso nicht bei UFo's - die sind NICHT i.d. Forms-Auflistung !

Der Aufruf der o.a. Routine erfolgt zB. aus dem Formularcode so:

Cancel = blabla(Me)

HTH Erwin...

TommyK
02.06.2003, 11:55
Hallo Thomas,

hab mal versucht etwas zu erstellen ist aber ungetestet.

Public Sub TestTextFeld(objF As Form)
On Error Resume Next
For Each strCtlName In avarCtlList
If IsNull(objF(strCtlName).Value) Then
objF(strCtlName).BackColor = lngRot
validFormCheck = False
'Me.txtStatus = "Pflegen Sie bitte die gekennzeichneten Felder!"
If TypeOf objF Is SubForm Then
objF.Form(strCtlName).BackColor = lngRot
validFormCheck = False
End If
Else
objF(strCtlName).BackColor = lngDefault
If TypeOf objF Is SubForm Then
objF.Form(strCtlName).BackColor = lngDefault
End If
End If
Next strCtlName
End Sub


Der Aufruf erfolgt dann so:
TestTextFeld "Formular!frmMain"

tfischer
02.06.2003, 13:24
Hallo TommyK!

Vielen Dank für die Antwort!

Ich habe versuch meine Funktion mit

Call checkForm (Formular!frmMain)

aufzurufen.

Allerdings bekomme ich dann die Fehlermeldung "Variable nicht definiert".


Thomas

TommyK
02.06.2003, 14:03
Hallo Thomas,

ich habe die Sache mal umgestellt und eine Bsp-DB angehangen.

In der Funktion wird davon ausgegangen das alle Controls berüchsichtigt werden die die Tag-Eigenschaft "TESTTEXT" haben.

Public Function TestTextFeld(objF As Form, strMarke As String)
On Error Resume Next

Dim intI As Integer, objC As Control, varX As Variant
Dim lngRot As Long, lngSchwarz As Long

lngRot = RGB(255, 0, 0)
lngSchwarz = RGB(0, 0, 0)

For intI = 0 To objF.count - 1
Set objC = objF(intI)
If InStr(objC.Tag, strMarke) > 0 Then
If IsNull(objC.Value) Then
objC.BackColor = lngRot
Else
objC.BackColor = lngSchwarz
End If
If TypeOf objF Is SubForm Then
varX = TestTextFeld(objC.Form, strMarke)
End If
End If
Next intI
End Function

Der Aufruf für das Hauptform :

TestTextFeld Me, "TESTTEXT"

und für das UFO:

TestTextFeld Forms![frmMain]![frmMain_Sub].Form, "TESTTEXT"

tfischer
02.06.2003, 19:50
Hallo TommyK!

Vielen Dank für die viele Arbeit.
Ich werde das mal ausprobieren, bin bis jetzt noch nicht dazu gekommen.
Aber noch mal, vielen Dank!

Thomas