Guten Morgen,
ich habe schon eine Weile erfolglos nach einer Lösung für folgendes Problem gesucht: Über eine Schaltfläche möchte ich eine InputBox aufrufen. Mit dem was der Nutzer hier eingibt anschließend filtern. (Hier nach Auftragsnummern). Unten stehender Code funktioniert soweit, dass sich die InputBox öffnet, das Ergebnis des Filterns ist allerdings dann kein Datensatz. Was muss ich verändern, dass es klappt?
Private Sub Befehl149_Click()
Dim strAusgabe As String
strAusgabe = InputBox("Gewünschte Auftragsnummer eingeben")
Me.Filter = "[Auftragsnummern] = strAusgabe"
Me.FilterOn = True
End Sub
Ich bin dankbar für jede Hilfe,
Viele Grüße Caro
Hallo!
Tipp zur Fehlersuche:
Private Sub Befehl149_Click()
Dim strAusgabe As String
dim strFilter as String
strAusgabe = InputBox("Gewünschte Auftragsnummer eingeben")
strFilter = "[Auftragsnummern] = strAusgabe"
Debug.Print strFilter
Stop
Me.Filter = strFilter
Me.FilterOn = True
End Sub
Den fehlerhaften Teil habe ich übernommen.
Vielleicht findest du ihn selbst, wenn du die Ausgabe von Debug.Print im Direktbereich ansiehst. ;)
Gruß
Josef
Hallo Josef,
danke für den Tipp zur Fehlersuche.:) Ich dachte mir schon, dass es an dieser Zeile liegt. Weiß aber nicht wie ich es anders formulieren muss. ???
Gruß
Caro
Wenn du willst, versuchen wir einen AHA-Effekt zu erzeugen, wenn du selbst drauf kommst. Falls du lieber gleich das Ergebnis willst, einfach schreiben, dann zeige ich dir gleich den richtigen Code.
Wenn du das Ergebnis im Direktbreich angesehen hast, kam folgendes raus:
[Auftragsnummern] = strAusgabe
Es steht der Name der Variable im String statt deren Inhalt.
=> Wie verknüpft man einen String mit einer Variablen?
Tipp: Stell dir vor, "[Auftragsnummern] = " würde eine Konstante sein.
Gruß
Josef
Ich glaube ich stehe total auf dem Schlauch. 😕
Danke für den Versuch, es wäre super du könntest mir sagen woran es liegt...
Ich hoffe es wird mir dann wenigstens klar 🙈
Vergleiche
strFilter = "[Auftragsnummern] = strAusgabe"
Debug.Print strFilter
mit
strFilter = "[Auftragsnummern] = " & strAusgabe
Debug.Print strFilter
Falls [Auftragsnummern] ein Text-Datenfeld ist, müssen noch ' dazu:
strFilter = "[Auftragsnummern] = '" & strAusgabe & "'"
Debug.Print strFilter
Zusatzinfo: wenn du so einen Filterstring für Textfelder zusammensetzt, musst du auch darauf achten, ob vielleicht ein ' im Inhalte der Variablen vorkommen würde. Dann wäre nämlich der Filterausdruch falsch.
Um das vorzubeugen, die eventuell vorhandenen ' in der Variable verdoppeln.
strFilter = "[Auftragsnummern] = '" & Replace(strAusgabe, "'", "''") & "'"
Debug.Print strFilter
Zum Nachlesen: https://wiki.access-codelib.net/SQL-Text_f%C3%BCr_Filterbedingung
BTW: warum heißt das Datenfeld eigentlich "Auftragsnummern"?
Stehen mehrere Nummern in einem Datenfeld?
Gruß
Josef
Vielen lieben Dank. Auch für die ausführliche Erklärung und die Mühe!
Ich werde es nochmal in Ruhe nachlesen. :-)
Nein im Datenfeld steht nur eine Nummer, das war ein Benennungsfehler von mir und vermutlich etwas verwirrend.
Schönes Wochenende,
Gruß Caro
Kleiner Zusatz: teste den Code, wenn du bei der Inputbox auf abbrechen klickst oder keinen Wert eingibst. => eventuell Prüfung auf len(strAusgabe) > 0 ergänzen.
Schönes Wochenende!
Josef
Hallo Caro,
Wie du an Josefs letztem Post erkennen kannst, ist die Inputbox ein
schlechtes Werkzeug. Besser ist ein ungebundenes Textfeld auf dem
Form zum Finden einer Auftragsnummer. Da kannst du sogar auf den
extra Button verzichten, weil du direkt nach der Eingabebestätigung
deinen Filter setzen kannst
Private DasNeueFeld_AfterUpdate()
Me.Filter = "AuftragsNummer = " & Me.DasNeueFeld
Me.FilterOn =True
End Sub
gruss ekkehard
P.S.: Weil du das immer wieder brauchst, lies mal dies (https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/ampersand-operator).
Hallo,
ich würde mir die vorhanden Auftragsnummern (aus der Tabelle mit den Aufträgen) in einem ungebunden Kombifeld anzeigen, das man dann auch zum Filtern nutzt.
Das Kombifeld hat die Eigenschaft "Automatisch ergänzen" und man ist mit wenigen Zeichen die man eingibt bei der gesuchten Auftragsnummer. Mit einem Klick kann man dann filtern. Bei der Inputbox und dem Textfeld muss immer die vollständige Auftragsnummer eingegeben werden.
Wenn die Auftragsnummer eine Zahl ist, kann auch mit dem Kombi der Codevorschlag von Ekkehard in #8 verwendet werden. Bei Text sind noch Hochkommas zu verwenden.
Danke euch für den ganzen Input! :-)
Schöne Woche allen.