Ich möchte ein List-Feld auf einem Word-Benutzerformular basierend auf den Daten, die in einem Textfeld in demselben Formular eingegeben werden, füllen. Im Idealfall würde dies in Echtzeit geschehen (mit dem Änderungsereignis, das ich denke), wobei jedes Zeichen, das in das Textfeld eingegeben wurde, die im Listenfeld angezeigten Elemente filtert.VBA: Verwenden Sie Textfeld, um List-Feld auf Word-Benutzerformular aufzufüllen - Abfrage-Excel-Datenbank
Die Datenquelle ist eine Excel "Datenbank", auf die mit DAO zugegriffen wird. Der folgende Code funktioniert, aber er trägt die gesamte Datenbank in Listenfeld ein (basierend darauf - Link).
Private Sub UserForm_Initialize()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim NoOfRecords As Long
'Open the database (Excel File)
Set db = OpenDatabase("C:\Users\T400\Documents\UserFormListTest.xlsx" _
, False, False, "Excel 8.0")
'Retrieve the recordset > Excel Range = "ListBoxData"
Set rs = db.OpenRecordset("SELECT * FROM ListBoxData")
' Determine the number of retrieved records
With rs
.MoveLast
NoOfRecords = .RecordCount
.MoveFirst
End With
' Set the number of Columns = number of Fields in recordset
ListBox1.ColumnCount = rs.Fields.Count
ListBox1.Column = rs.GetRows(NoOfRecords)
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Sub
Wie kann ich die Daten filtern, so dass das Listenfeld nur für das Textfeld ausgefüllt wird? Ich habe auf eine einfache Lösung gehofft, wie zum Beispiel die Modifikation des SELECT *
Abfrageteils des Codes.
Ist das möglich? Oder gibt es einen besseren Weg?
Sie sind auf dem richtigen Weg! Fügen Sie der Anweisung 'Select' die' Where'-Klausel hinzu, um Daten filtern zu können. –
Danke! Ich habe 'Set rs = db.OpenRecordset (" SELECT * FROM ListBoxData WHERE Name = 'Andy Smith' ")' hinzugefügt und nur diesen Datensatz zurückgegeben. Das Textfeld noch nicht verwenden, aber ermutigend. –
Ich kann das nicht ausführen, wenn ich das "Andy Smith" ', das im obigen Kommentar hart codiert ist, durch eine Variable ersetze. Ich denke, es ist die Syntax und habe mehrere Variationen mit und ohne einfache und doppelte Anführungszeichen usw. ausprobiert ... irgendwelche Vorschläge? –