Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Felder in Funktion als String ansprechen ? aber wie?

Frage Microsoft Microsoft Office

Mitglied: xpilzx1

xpilzx1 (Level 1) - Jetzt verbinden

05.07.2010, aktualisiert 16:27 Uhr, 4991 Aufrufe, 12 Kommentare

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:
01.
Public Function PFCT_FILTER(PVAR_FORMULAR As Form, PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String 
02.
 
03.
 On Error GoTo FEHLER 
04.
     If Nz(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) <> "" Then 
05.
        PVAR_FORMULAR.Filter = "(PVAR_FORMFELD_1) Like '" & Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'" 
06.
        PVAR_FORMULAR.FilterOn = True 
07.
  Stop 
08.
    Else 
09.
        PVAR_FORMULAR.FilterOn = False 
10.
        Exit Function 
11.
    End If 
12.
FEHLER: 
13.
    If PVAR_FORMULAR.RecordsetClone.RecordCount = 0 Then 
14.
        PVAR_FORMULAR.Filter = "" 
15.
        PVAR_FORMULAR.PVAR_SUCHFELD_1.SetFocus 
16.
        PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) 
17.
        MsgBox "Keine Übereinstimung gefunden" 
18.
        Exit Function 
19.
    End If 
20.
     PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) 
21.
 End Function
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
Mitglied: thaenhusen
05.07.2010 um 14:38 Uhr
Moin.
01.
Public Function PFCT_FILTER(PVAR_FORMULAR As Form, PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String 
02.
On Error GoTo FEHLER 
03.
If Nz(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) <> "" Then 
04.
    PVAR_FORMULAR.Filter = PVAR_FORMFELD_1 & " Like '" & Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'" 
05.
    PVAR_FORMULAR.FilterOn = True 
06.
Else 
07.
   PVAR_FORMULAR.FilterOn = False 
08.
   Exit Function 
09.
End If
FEHLER:
01.
If PVAR_FORMULAR.RecordsetClone.RecordCount = 0 Then 
02.
  PVAR_FORMULAR.Filter = "" 
03.
  PVAR_FORMULAR.PVAR_SUCHFELD_1.SetFocus 
04.
  PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) 
05.
  MsgBox "Keine Übereinstimung gefunden" 
06.
End If 
07.
  PVAR_FORMULAR!PVAR_SUCHFELD_1.SelStart = Len(PVAR_FORMULAR!PVAR_SUCHFELD_1.Text) 
08.
End Function
So könnte das funktionieren.

HTH
MK
Bitte warten ..
Mitglied: xpilzx1
05.07.2010 um 15:00 Uhr
Hallo, dank für die rasche antwort,

leider funktioniert das so auch nicht und ich denke ich hab das nicht genau erklährt. mir ist gerade aufgefallen wo der Fehler ist, aber ich weis keine lösung dafür.
bei diesem vergleich :PVAR_FORMULAR.Filter = PVAR_FORMFELD_1 & " Like '" & Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'"
tut die funktion den inhalt von der ersten zeile von PVAR_FORMFELD_1 mit Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'" vergleichen.
das ist aber falsch. es soll ja das Feld PVAR_FORMFELD_1 verglichen werden. also eigentlich Laut deklaration steht dort (Spalte) VORNAME dirn.
ich hänge auch nochmal ein Screenshoot vom Aufruf mit an.
01.
Private Sub FILTER_VORNAME_Change() 
02.
     SQL_FILTER = PFCT_FILTER(Forms!FRM_MASTER!FRM_MITARBEITER_AUSWAHL_SUB.Form, FILTER_VORNAME, VORNAME) 
03.
  Stop 
04.
  End Sub
also irgentwie benötige ich die Funktion Dim PVAR_FORMFELD_1 as Feld im Formular, und dim PVAR_SUCHFELD_1 as Textfeld im formular.

ist dies möglich?

ach ja ich nutze Access 2003

danke
Bitte warten ..
Mitglied: xpilzx1
05.07.2010 um 15:26 Uhr
Zitat von xpilzx1:
Hallo, dank für die rasche antwort,

leider funktioniert das so auch nicht und ich denke ich hab das nicht genau erklährt. mir ist gerade aufgefallen wo der
Fehler ist, aber ich weis keine lösung dafür.
bei diesem vergleich :PVAR_FORMULAR.Filter = PVAR_FORMFELD_1 & " Like '" &
Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text & "*'"
tut die funktion den inhalt von der ersten zeile von PVAR_FORMFELD_1 mit Forms(PVAR_FORMULAR)!PVAR_SUCHFELD_1.Text &
"*'" vergleichen.
das ist aber falsch. es soll ja das Feld PVAR_FORMFELD_1 verglichen werden. also eigentlich Laut deklaration steht dort (Spalte)
VORNAME dirn.
ich hänge auch nochmal ein Screenshoot vom Aufruf mit an.

Private Sub FILTER_VORNAME_Change()
SQL_FILTER = PFCT_FILTER(Forms!FRM_MASTER!FRM_MITARBEITER_AUSWAHL_SUB.Form, FILTER_VORNAME, VORNAME)
Stop
End Sub

also irgentwie benötige ich die Funktion Dim PVAR_FORMFELD_1 as Feld im Formular, und dim PVAR_SUCHFELD_1 as Textfeld im
formular.

ist dies möglich?

ach ja ich nutze Access 2003

danke


ach ja und einmal den Code so wie ichihn als sub im unterformular direkt aufrufe, so funtioniert er auch tadellos:
01.
Private Sub FILTER_VORNAME_Change() 
02.
 On Error GoTo FEHLER_1 
03.
   If Nz(Me!FILTER_VORNAME.Text) <> "" Then 
04.
   Me.Filter = "VORNAME Like '" & Me!FILTER_VORNAME.Text & "*' And NAME Like '" & Me!FILTER_NAME & "*' " 
05.
   Me.FilterOn = True 
06.
    Else 
07.
    Me.FilterOn = False 
08.
    Exit Sub 
09.
    End If 
10.
FEHLER_1: 
11.
   If Me.RecordsetClone.RecordCount = 0 Then 
12.
   Me.Filter = "" 
13.
   Me.FILTER_VORNAME.SetFocus 
14.
   Me!FILTER_VORNAME.SelStart = Len(Me!FILTER_VORNAME.Text) 
15.
   MsgBox "Keine Übereinstimung gefunden in VORNAME" 
16.
   Exit Sub 
17.
 End If 
18.
    Me!FILTER_VORNAME.SelStart = Len(Me!FILTER_VORNAME.Text) 
19.
 End Sub
Bitte warten ..
Mitglied: Biber
05.07.2010 um 16:20 Uhr
[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]
Bitte warten ..
Mitglied: xpilzx1
05.07.2010 um 16:27 Uhr
hallo biber,

sorry das die formatierung nicht stimmt, wuste ich nicht. aber danke für deine bearbeitung. so siht das doch gleich viel besser aus.
hast du evl. auch einen anhaltspunkt wie ich mein problem lösen kann? ich dreh bald durch hehe.
Bitte warten ..
Mitglied: thaenhusen
05.07.2010 um 16:40 Uhr
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
Bitte warten ..
Mitglied: xpilzx1
06.07.2010 um 08:53 Uhr
Hallo thaenhusen,

danke für deine mühe, aber leider funktioniert das so auch nicht bei mir. nun kommt ein neuer fehler, Office kann das vormular " FRM_MASTER!FRM_MITARBEITER_AUSWAHL_SUB" nicht finden. die sache mit den VORNAMEN in " " ist aber eine gute idee gewesen. manchmal seh ich den wald nichtmehr vor lauter bäumen.
kannst du dir, oder besser mir erklähren woher dieser fehler kommt? ich habe schon das me.Name ersetzt durch eine variable zusamengesätzt aus me.parent und me.Name aber immer sagt access es kann das formular nicht finden.
Bitte warten ..
Mitglied: thaenhusen
06.07.2010 um 10:54 Uhr
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
Bitte warten ..
Mitglied: xpilzx1
06.07.2010 um 11:15 Uhr
HURRA

ich könnt dich knutschen *lol* vielen tausend dank das ist genau das was ich haben wollte.
anscheint kann man nicht so einfach anfangen sich hinsetzen und einen Datenbank programmieren.
muss wohl noch ein bisschen Grundlagenforschung betreiben.
zum glück gibt es ja gute Foren mit hilfsbereiten Usern.

nochmal vielen dank und einen schönen tag.

ach eine frage nur weil es mich interessiert, den inhalt der variable AbsForm kann man im debuger nicht ansehen?
Bitte warten ..
Mitglied: thaenhusen
06.07.2010 um 11:31 Uhr
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
Bitte warten ..
Mitglied: xpilzx1
06.07.2010 um 11:46 Uhr
wirklich es tut mir leid aber ich hab noch eine frage. dein Code funktioniert soweit bestens, aber das OnErrorGoTo geht nun nicht mehr und es kommt bei Eingabe eines Wortes ohne Übereinstimung der Fehler :Laufzeitfehler 2158 sie können die Eigenschaft oder Methode des Steuerelementes nur dann auswerten wenn das Steuerelement den Focus hat.
die Meldung hatte ich vorher auch schonmal, hatte sie aber mit On Error go to abgefangen.
kann man diese Anweisung in dem Fall nicht verwenden?
Bitte warten ..
Mitglied: xpilzx1
06.07.2010 um 11:59 Uhr
Zitat von xpilzx1:
wirklich es tut mir leid aber ich hab noch eine frage. dein Code funktioniert soweit bestens, aber das OnErrorGoTo geht nun nicht
mehr und es kommt bei Eingabe eines Wortes ohne Übereinstimung der Fehler :Laufzeitfehler 2158 sie können die
Eigenschaft oder Methode des Steuerelementes nur dann auswerten wenn das Steuerelement den Focus hat.
die Meldung hatte ich vorher auch schonmal, hatte sie aber mit On Error go to abgefangen.
kann man diese Anweisung in dem Fall nicht verwenden?

falscher Alarm, ich habe es ein wenig angepasst und nun geht es auch wieder. der Vollständigkeit halber hier der neue Code:
  1. Public Function PFCT_FILTER(PVAR_SUCHFELD_1 As String, PVAR_FORMFELD_1 As String) As String
  2. Dim AktSteuerelement As Control
  3. Set AktSteuerelement = Screen.ActiveControl
  4. On Error GoTo FEHLER
  5. Call setFormularObjekt
  6. If Nz(AbsForm(PVAR_SUCHFELD_1).Text) <> "" Then
  7. AbsForm.Filter = PVAR_FORMFELD_1 & " Like '" & AbsForm(PVAR_SUCHFELD_1).Text & "*'"
  8. AbsForm.FilterOn = True
  9. Else
  10. AbsForm.FilterOn = False
  11. Exit Function
  12. End If
  13. FEHLER: If AbsForm.RecordsetClone.RecordCount = 0 Then
  14. AbsForm.Filter = ""
  15. AktSteuerelement.SetFocus
  16. AktSteuerelement.SelStart = Len(AbsForm(PVAR_SUCHFELD_1).Text)
  17. MsgBox "Keine Übereinstimung gefunden in " & AktSteuerelement.NAME
  18. Exit Function
  19. End If
  20. AbsForm(PVAR_SUCHFELD_1).SelStart = Len(AbsForm(PVAR_SUCHFELD_1).Text)
  21. End Function
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
JavaScript
AngularJS Variable über Input in Funktion ausführen

Frage von badkilla zum Thema JavaScript ...

LAN, WAN, Wireless
Hat On Networks PL500PS WLAN-Funktion? (4)

Frage von Andy1987 zum Thema LAN, WAN, Wireless ...

C und C++
gelöst Anzahl der Buchstaben in einem String Element Array C++ (3)

Frage von Protected zum Thema C und C ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...