Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Funktion in Kriterium für Abfrage

Begonnen von jagger, Juni 01, 2019, 14:27:03

⏪ vorheriges - nächstes ⏩

jagger

Hallo in die Runde,

ich habe eine Funktion, die mir einen Formularnamen ausliest. KLNDR789()
Wie bekommen ich nun diese Funktion in mein Kriterium?
"Wie [Formulare]![frm_Kalender_NK7]![WJ]"
Like [Formulare]![frm_Kalender_NK7]![WJ]
Der Teil "[frm_Kalender_NK7]" soll durch den Wert der Funktion ersetzt werden.
Wie muss das geschrieben werden?
Geht das so überhaupt?

Für einen guten Tipp, schon einmal Danke im Voraus.
LG
jagger

ebs17

Wenn die Funktion in einem Standardmodul liegt:
WHERE XYZ = KLNDR789()
Mit freundlichem Glück Auf!

Eberhard

jagger

Hallo Ebs17,

ich bekomme den String nicht hin.
WHERE  IsoWeekAndYear([tDate]) Like [Formulare]KLNDR789()![WJ]
Ich habe schon sämtliche Klammervarianten um und hinter "KLNDR789()" durch. Es klappt nicht.
Die Fehlermeldung kommt schon im Editor.
"Der von Ihnen eingegebene Ausdruck enthält einen ungültigen .- (Punkt) oder !-Operator oder ein ungültiges Klammerpaar()"

Die Funktion "KLNDR789()" liefert das gewünschte Ergebnis und liegt in einem Standardmodul.

Function KLNDR789() As String
Dim KLNDR As String
KLNDR = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
MsgBox KLNDR
End Function


In vba geht das mit einer Variablen ja ganz easy.
Z.B.:

      Dim KLNDR789 As String
      KLNDR789 = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
      If IsMissing(ArgJahr) Then ArgJahr = Forms(KLNDR789)![kaJ]

Also: ..."Forms(KLNDR789)![kaJ]

Aber in dem Abfragekriterium klappt es nicht.
Wie muss denn so ein zusammengesetzter String aufgebaut sein? Ich kann auch nichts dazu im www finden.

Mit Dank im Voraus

LG
jagger

Josef P.

Hallo!

Zitat
Function KLNDR789() As String
Dim KLNDR As String
KLNDR = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
MsgBox KLNDR
End Function
ZitatDie Funktion "KLNDR789()" liefert das gewünschte Ergebnis ...
Das glaube ich dir nicht. Die Funktion zeigt in der Msgbox das gewünschte Ergebnis, aber sie liefert es nicht.

Zum Ausprobieren:
sub Test()
   msgbox KLNDR789()
end sub

=> Kein Text in der Messagebox.

Fehler: Es fehlt der Code für die Funktionsrückgabe.
Function KLNDR789() As String
   Dim KLNDR As String
   KLNDR = Nz(DLookup("Kalender789", "tab_int_Daten", ""))
   'MsgBox KLNDR
   KLNDR789 = KLNDR
End Function


mfg
Josef

jagger

@Josef P.,

oops, Du hast natürlich mit der Funktion völlig recht.
Die msgbox hatte ich da nur drin, um zu sehen, ob sich da was tut. Die Funktionsrückgabe hat natürlich in meinem Beispiel gefehlt. Sorry. ???
Aber das löst leider nicht das Problem mit dem String für die Abfrage.
Danke fürs Mitmachen und Helfen!

LG
jagger

Josef P.

Warum verwendest du nicht noch eine Funktion, die die Werte liefert?

Public function FormularWert(byval FormName as String, byval ControlName as string) as Variant
     FormularWert = Forms(FormName).Controls(ControlName).Value
end function


oder direkt mit der KLNDR789-Funktion:
Public function KLNDR789Wert(byval ControlName as string) as Variant

     dim FormName as String
     FormName = KLNDR789()
     KLNDR789Wert = Forms(FormName).Controls(ControlName).Value

end function


Damit hast du Funktionen, die in der Abfrage ohne Forms(...) verwendet werden können.

[OT]
Ich bin allerdings kein besonderer Freund von Funktionen in Abfragen, die ein geöffnetes Formular benötigen, da mir das eine Abfrage zu abhängig macht.

mfg
Josef

jagger

Josef P.,

das klingt gut. Also den kompletten Sting in der Funktion zusammensetzen und dann im Kriterium der Abfrage nutzen.

ZitatIch bin allerdings kein besonderer Freund von Funktionen in Abfragen, die ein geöffnetes Formular benötigen, da mir das eine Abfrage zu abhängig macht.

Die Abfrage(n) "füllen" die Ufos.
Wenn das HF nicht geöffnet ist, sind auch die Ufos nicht in Gebrauch.

Danke für Deinen guten Tipp!

LG
jagger