Felder in Funktion als String ansprechen ? aber wie?
Hallo allerseits,
ich habe mal wieder ein Mittelschweres Problemm was mich rasend macht.
ich will eine Funktion schreiben die ein formular anhand eines textfeldes filtert.
die filterfunktion als SUB funktioniert bestens. nur wenn ich die Zuweisungen (Formularname,Textfeldname ....)
durch Variablen ersetze dann bekomme ich immer die Meldung : Laufzeitfehler 2465, office kann das in ihrem ausdruck angesprochene feld nicht finden.
hier auch mal der Code:
meine frage ist 1. gibt es eine möglichkeit ein Tabellenfeld bzw ein Textfeld anhand eines String's anzusprechen ODER
2. wie muss ich die Variablen PVAR_SUCHFELD_1 und PVAR_FORMFELD_1 deklarieren damit es so Klappt?
PVAR_SUCHFELD_1 = Ein Ungebundenes Textfeld, PVAR_FORMFELD_1 = ein feld im Formular
bin ein Neuling was VBA angeht, und hoffe ich konnte es verständlich erklähren
ich habe mal wieder ein Mittelschweres Problemm was mich rasend macht.
ich will eine Funktion schreiben die ein formular anhand eines textfeldes filtert.
die filterfunktion als SUB funktioniert bestens. nur wenn ich die Zuweisungen (Formularname,Textfeldname ....)
durch Variablen ersetze dann bekomme ich immer die Meldung : Laufzeitfehler 2465, office kann das in ihrem ausdruck angesprochene feld nicht finden.
hier auch mal der Code:
Public Function PFCT_FILTER(PVAR_FORMULAR As Form, PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
On Error GoTo FEHLER
If Nz(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) <> "" Then
PVAR_FORMULAR.Filter = "(PVAR_FORMFELD_1) Like '" & Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'"
PVAR_FORMULAR.FilterOn = True
Stop
Else
PVAR_FORMULAR.FilterOn = False
Exit Function
End If
FEHLER:
If PVAR_FORMULAR.RecordsetClone.RecordCount = 0 Then
PVAR_FORMULAR.Filter = ""
PVAR_FORMULAR.PVAR_SUCHFELD_1.SetFocus
PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text)
MsgBox "Keine Übereinstimung gefunden"
Exit Function
End If
PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text)
End Function
2. wie muss ich die Variablen PVAR_SUCHFELD_1 und PVAR_FORMFELD_1 deklarieren damit es so Klappt?
PVAR_SUCHFELD_1 = Ein Ungebundenes Textfeld, PVAR_FORMFELD_1 = ein feld im Formular
bin ein Neuling was VBA angeht, und hoffe ich konnte es verständlich erklähren
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146251
Url: https://administrator.de/forum/felder-in-funktion-als-string-ansprechen-aber-wie-146251.html
Ausgedruckt am: 20.04.2025 um 12:04 Uhr
12 Kommentare
Neuester Kommentar
Moin.
FEHLER:
So könnte das funktionieren.
HTH
MK
Public Function PFCT_FILTER(PVAR_FORMULAR As Form, PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
On Error GoTo FEHLER
If Nz(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) <> "" Then
PVAR_FORMULAR.Filter = PVAR_FORMFELD_1 & " Like '" & Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'"
PVAR_FORMULAR.FilterOn = True
Else
PVAR_FORMULAR.FilterOn = False
Exit Function
End If
If PVAR_FORMULAR.RecordsetClone.RecordCount = 0 Then
PVAR_FORMULAR.Filter = ""
PVAR_FORMULAR.PVAR_SUCHFELD_1.SetFocus
PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text)
MsgBox "Keine Übereinstimung gefunden"
End If
PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text)
End Function
HTH
MK
[Halb OT]
Moin xpilzx1,
ich habe mal (wenigstens) in dem letzten Kommentar den VBA-Krams in Code-Formatierung gesetzt.
Meine Hoffnung, dass dadurch eventuell auch Einrückungen der Zeilen eine gewisse Strukturiertheit vorgaukeln würden, hat sich allerdings zerschlagen.
Bitte verwende dennoch bei Fragen zur Skripterstellung/Programmierung in Zukunft auch Code-Tags
Die sind beschrieben in den FAQ oder über den "Hilfe zur Forrmatierung"-Button erreichbar , der beim "Editieren" angeboten wird.
Dann können alle auf bestimmte Zeilennummern verweisen - da macht es doch einfacher.
Grüße
Biber
[/Halb OT]
Moin xpilzx1,
ich habe mal (wenigstens) in dem letzten Kommentar den VBA-Krams in Code-Formatierung gesetzt.
Meine Hoffnung, dass dadurch eventuell auch Einrückungen der Zeilen eine gewisse Strukturiertheit vorgaukeln würden, hat sich allerdings zerschlagen.
Bitte verwende dennoch bei Fragen zur Skripterstellung/Programmierung in Zukunft auch Code-Tags
Die sind beschrieben in den FAQ oder über den "Hilfe zur Forrmatierung"-Button erreichbar , der beim "Editieren" angeboten wird.
Dann können alle auf bestimmte Zeilennummern verweisen - da macht es doch einfacher.
Grüße
Biber
[/Halb OT]
Moin,
Ich habe mal eben den Fall nachvollzogen mit den neuen Infos.
Folgende Funktion funktioniert (Toller Satz, gell?
):
Public Function PFCT_FILTER(PVAR_FORMULAR As String, PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
On Error GoTo FEHLER
If Nz(Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text) <> "" Then
Forms(PVAR_FORMULAR).Filter = PVAR_FORMFELD_1 & " Like '" & Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text & "*'"
Forms(PVAR_FORMULAR).FilterOn = True
Else
Forms(PVAR_FORMULAR).FilterOn = False
Exit Function
End If
FEHLER:
If Forms(PVAR_FORMULAR).RecordsetClone.RecordCount = 0 Then
Forms(PVAR_FORMULAR).Filter = ""
Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).SetFocus
Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).SelStart = Len(Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text)
MsgBox "Keine Übereinstimung gefunden"
Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).SelStart = Len(Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text)
End If
End Function
Aufruf:
z.B. in der After_Update sub das Feldes FILTER_VORNAME
Call PFCT_FILTER(Me.Name, "FILTER_VORNAME", "VORNAME")
HTH
MK
Ich habe mal eben den Fall nachvollzogen mit den neuen Infos.
Folgende Funktion funktioniert (Toller Satz, gell?
Public Function PFCT_FILTER(PVAR_FORMULAR As String, PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
On Error GoTo FEHLER
If Nz(Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text) <> "" Then
Forms(PVAR_FORMULAR).Filter = PVAR_FORMFELD_1 & " Like '" & Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text & "*'"
Forms(PVAR_FORMULAR).FilterOn = True
Else
Forms(PVAR_FORMULAR).FilterOn = False
Exit Function
End If
FEHLER:
If Forms(PVAR_FORMULAR).RecordsetClone.RecordCount = 0 Then
Forms(PVAR_FORMULAR).Filter = ""
Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).SetFocus
Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).SelStart = Len(Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text)
MsgBox "Keine Übereinstimung gefunden"
Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).SelStart = Len(Forms(PVAR_FORMULAR)(PVAR_SUCHFELD_1).Text)
End If
End Function
Aufruf:
z.B. in der After_Update sub das Feldes FILTER_VORNAME
Call PFCT_FILTER(Me.Name, "FILTER_VORNAME", "VORNAME")
HTH
MK
Moin.
Da hast Du jetzt ein Unterformular das gefiltert werden soll.
Dann musst Du da ander mit umgehen... weil Access das anders auswertet...
Public AbsForm As Object 'Das Absolute Formular, dass gefiltert werden soll.
Public Function setFormularObjekt()
On Error GoTo ErrorHandler
Set AbsForm = Forms(Screen.ActiveForm.Name)
Set AbsForm = Forms(Screen.ActiveForm.Name)(Screen.ActiveForm.ActiveControl.Name).Form
GoTo weiter:
ErrorHandler:
'nichts machen
End Function
Public Function PFCT_FILTER(PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
On Error GoTo FEHLER
call setFormularObjekt
If Nz(Absform(PVAR_SUCHFELD_1).Text) <> "" Then
Absform.Filter = PVAR_FORMFELD_1 & " Like '" & Absform(PVAR_SUCHFELD_1).Text & "*'"
Absform.FilterOn = True
Else
Absform.FilterOn = False
Exit Function
End If
FEHLER:
If Absform.RecordsetClone.RecordCount = 0 Then
Absform.Filter = ""
Absform.SetFocus
Absform(PVAR_SUCHFELD_1).SelStart = Len(Absform(PVAR_SUCHFELD_1).Text)
MsgBox "Keine Übereinstimung gefunden"
Absform(PVAR_SUCHFELD_1).SelStart = Len(Absform(PVAR_SUCHFELD_1).Text)
End If
End Function
Aufruf:
Call PFCT_FILTER("FILTER_VORNAME", "VORNAME")
Desweiteren solltest Du Dich mal mit den Events und Abhängigkeiten von Access-Formularen beschäftigen,
sonst wirst Du da noch häufig drüber stolpern...
HTH
MK
Da hast Du jetzt ein Unterformular das gefiltert werden soll.
Dann musst Du da ander mit umgehen... weil Access das anders auswertet...
Public AbsForm As Object 'Das Absolute Formular, dass gefiltert werden soll.
Public Function setFormularObjekt()
On Error GoTo ErrorHandler
Set AbsForm = Forms(Screen.ActiveForm.Name)
Set AbsForm = Forms(Screen.ActiveForm.Name)(Screen.ActiveForm.ActiveControl.Name).Form
GoTo weiter:
ErrorHandler:
'nichts machen
End Function
Public Function PFCT_FILTER(PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
On Error GoTo FEHLER
call setFormularObjekt
If Nz(Absform(PVAR_SUCHFELD_1).Text) <> "" Then
Absform.Filter = PVAR_FORMFELD_1 & " Like '" & Absform(PVAR_SUCHFELD_1).Text & "*'"
Absform.FilterOn = True
Else
Absform.FilterOn = False
Exit Function
End If
FEHLER:
If Absform.RecordsetClone.RecordCount = 0 Then
Absform.Filter = ""
Absform.SetFocus
Absform(PVAR_SUCHFELD_1).SelStart = Len(Absform(PVAR_SUCHFELD_1).Text)
MsgBox "Keine Übereinstimung gefunden"
Absform(PVAR_SUCHFELD_1).SelStart = Len(Absform(PVAR_SUCHFELD_1).Text)
End If
End Function
Aufruf:
Call PFCT_FILTER("FILTER_VORNAME", "VORNAME")
Desweiteren solltest Du Dich mal mit den Events und Abhängigkeiten von Access-Formularen beschäftigen,
sonst wirst Du da noch häufig drüber stolpern...
HTH
MK
Moin.
Schön das ich Dir helfen konnte.
Naja, das ist wie mit allen Dingen. Man sollte schon ein paar Grundsätze kennen,
bevor es losgeht.
Der Inhalt vom Absform ist ein Formularobjekt und daher kannst Du das nicht mit debug.print ausgeben.
Du kannst nur z.b. Absform.Name aufrufen und im debug.print ausgeben.
Also die Datentypen im VBA solltest Du Dir da vieleicht auch noch mal ansehen.
Vorallem die Objekte und deren Methoden. Und wie man eigene Objekte mit
eigenen Methode anlegt und programmiert...
HTH
MK
Schön das ich Dir helfen konnte.
Naja, das ist wie mit allen Dingen. Man sollte schon ein paar Grundsätze kennen,
bevor es losgeht.
Der Inhalt vom Absform ist ein Formularobjekt und daher kannst Du das nicht mit debug.print ausgeben.
Du kannst nur z.b. Absform.Name aufrufen und im debug.print ausgeben.
Also die Datentypen im VBA solltest Du Dir da vieleicht auch noch mal ansehen.
Vorallem die Objekte und deren Methoden. Und wie man eigene Objekte mit
eigenen Methode anlegt und programmiert...
HTH
MK