Guten Tag in die Runde,
mit der Funktion
Public Function fctIsFormOpen(StrName As String) As Boolean
fctIsFormOpen = (SysCmd(acSysCmdGetObjectState, acForm, StrName) > 0)
End Function
http://www.donkarl.com?FAQ4.19
prüfe ich, ob das Formular "mnu_Kunden" geöffnet ist.
Die Funktion liefert das entsprechende Ergebnis, wenn ich sie per vba aufrufen.
Ich habe nun die Funktion als Kriterium in eine Abfrage eingebaut.
SELECT tab_ex_Umsatz_kompl.AGKDNR
FROM tab_ex_Umsatz_kompl
GROUP BY tab_ex_Umsatz_kompl.AGKDNR
HAVING (((tab_ex_Umsatz_kompl.AGKDNR)=IIf(fctIsFormOpen("mnu_Kunden")=True,[Formulare]![mnu_Kunden]![lbxKunden],[Formulare]![frm_Kunde]![AGKDNR])));
Kann man das eigentlich so machen oder funktioniert das generell nicht, oder habe ich die Funktion falsch eingesetzt?
Wenn nun Formular "mnu_Kunden" geöffnet ist (es ist auch in der Listbox ein Datensatz gewählt)
und Formular "frm_Kunde" ist nicht geöffnet,
fragt Access (Parameter eingeben) nach "Formulare!frm_Kunde!AGKDNR"
Eigentlich sollte hier ja "[Formulare]![frm_Kunde]![AGKDNR]" ignoriert werden.
Ist Formular "mnu_Kunden" nicht geöffnet
und Formular "frm_Kunde" ist geöffnet, fragt Access (Parameter eingeben) nach
"Formulare!mnu_Kunden!lbxKunden".
Eigentlich sollte hier ja "[Formulare]![mnu_Kunden]![lbxKunden]" ignoriert werden.
Sind beide Formulare geöffnet, wir die Abfrage ausgeführt.
Ich kann leider keinen Fehler erkennen.
Hat jemand eine Idee?
LG
jagger
Hallo,
erstens ist es praktisch immer von Nachteil, sich auf Formular-Steuerelemente zu beziehen. Original liegen die Daten in den Tabellen, Formulare dienen nur zur visuellen Darstellen und ggfls. dem Editieren der Daten.
Zweitens werden bei der IIF-Funktion immer beide Bedingungszweige ausgewertet und ergeben in diesem Fall eine Fehlersituation. (Ein "fehlender" Vergleichswert ist auch eine solche..)
Man könnte den IIF-Ausdruck in eine Public-Function auslagern. Zudem könnten die entspr. Formular-Steuerelement-Werte in Public-Variablen (oder Tempvar-Elemente) vorher abgelegt und von da aus weiter bearbeitet werden.
Hallo DF6GL,
den IIF-Ausdruck in eine Public-Function auszulagern, funktioniert super.
Funktion:
Public Function fctFormIsOpen()
If fctIsFormOpen("mnu_Kunden") = True Then
fctFormIsOpen = Forms!mnu_Kunden!lbxKunden
Else
fctFormIsOpen = Forms!frm_Kunde!AGKDNR
End If
End Function
Abfrage:
SELECT tab_ex_Umsatz_kompl.AGKDNR
FROM tab_ex_Umsatz_kompl
GROUP BY tab_ex_Umsatz_kompl.AGKDNR
HAVING (((tab_ex_Umsatz_kompl.AGKDNR)=fctFormIsOpen()));
Danke für den Tipp!
LG
jagger
Zitat von: jagger am April 14, 2019, 17:02:22
den IIF-Ausdruck in eine Public-Function auszulagern, funktioniert super.
Funktion:
Public Function fctFormIsOpen()
If fctIsFormOpen("mnu_Kunden") = True Then
Zum Abschluss solltest du deiner Funktion noch einen Namen verleihen, der wirklich das widerspiegelt, war sie tut. Die beiden Namen
fctFormIsOpen und
fctIsFormOpen sind schon in den wenigen Zeilen Code der Funktion selbst total verwirrend.