listbox - mehrspaltig - suchfunktion einbauen

01/06/2008 - 19:54 von jensspeedy | Report spam
und wieder hab ich nen kleines Problem - sorry Thomas dass ich den
code unten mit-poste aber ich denke dann ist es eher verstàndlich

in einem userform wird mit unten stehendem code eine Listbox befüllt,
aus der ich dann per Doppelklick Werte übernehmen kann - funktioniert
alles Supi
Nun würde ich gern in einem Textfeld die Anfangsbuchstaben des Namens
eingeben und aus der vorhandenen Liste wird alles "rausgeschmissen"
was nicht passt - also bei Eingabe von "mei" tauchen eben nur noch
Meier und Meise auf

Alle Möglichkeiten einer Suchfunktion, die ich bisher im netz gefunden
habe, starten aber sozusagen nach jeder Eingabe eine neue Suche in der
DB nach den entsprechenden Eintràgen - aber die Liste ist ja schon
vorhanden .

FRAGE ist also: wenn ich über ein Textfeld einige Buchstaben eingebe
[ Sub Text1_Change() ] - z.B. "mei" - muss ich dann wirklch nach jedem
Tippen eine neue Suchroutine starten oder kann ich nicht einfach aus
meiner schon vorhandenen Liste die "Nicht-passenden" löschen lassen?

und wenn ja - WIE lösche ich das Ganze - dazu hab ichh nichts
passendes gefunden ;-(


code des derzeitigen forms
[code]
Option Explicit

Private Sub Listbox1_dblclick(ByVal cancel As MSForms.ReturnBoolean)

Modul1.solutions1_1faxempf = Listbox1.List(Listbox1.ListIndex, 1)
Modul1.solutions1_2faxnumm = Listbox1.List(Listbox1.ListIndex, 2)

Unload Me

End Sub

Private Sub UserForm_Initialize()

On Error GoTo UserForm_InitializeError
Dim strAccessDir As String
Dim Pfad As String
Pfad = "C:\z_vorlagen\zzz_db\"

strAccessDir = Pfad
Dim appAccess As Access.Application
Dim strDBName As String
Dim DAO As Object
Dim wks As DAO.Workspace
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim varProductArray() As Variant
Dim ctl As ListBox
Dim lngProductCount As Long
Dim lngCount As Long

Set appAccess = CreateObject("Access.Application")
strDBName = strAccessDir & "Datenbank1.mdb"
Debug.Print "DBName: " & strDBName
appAccess.Quit

Set DAO = CreateObject("DAO.DBEngine.36")
Set wks = DAO.Workspaces(0)
Set dbs = wks.OpenDatabase(strDBName)
Set ctl = Listbox1
ctl.ColumnCount = 3
ctl.ColumnWidths = "177pt; 180pt; 110pt"

Set rst = dbs.OpenRecordset("SELECT * FROM D160_Adressen " & _
"ORDER BY Val(D160Lieferant),
D160Alpha")

rst.MoveLast
lngProductCount = rst.RecordCount - 1
ReDim varProductArray(lngProductCount, 3) As Variant
Debug.Print "Number of items in table: " & lngProductCount
rst.MoveFirst

For lngCount = 0 To lngProductCount
varProductArray(lngCount, 0) = rst![D160Alpha] & ""
varProductArray(lngCount, 1) = rst![D160Name1] & ""
varProductArray(lngCount, 2) = rst![D160Fax] & ""
rst.MoveNext
Next lngCount
ctl.List() = varProductArray

UserForm_InitializeExit:
Exit Sub

UserForm_InitializeError:
MsgBox "Error No: " & Err.Number & "; error message: " &
Err.Description
Resume UserForm_InitializeExit

End Sub
[/code]



der Jens
 

Lesen sie die antworten

#1 Wolfram Jahn
02/06/2008 - 00:27 | Warnen spam
jensspeedy schrieb:

FRAGE ist also: wenn ich über ein Textfeld einige Buchstaben eingebe
[ Sub Text1_Change() ] - z.B. "mei" - muss ich dann wirklch nach jedem
Tippen eine neue Suchroutine starten oder kann ich nicht einfach aus
meiner schon vorhandenen Liste die "Nicht-passenden" löschen lassen?

und wenn ja - WIE lösche ich das Ganze - dazu hab ichh nichts
passendes gefunden ;-(



Es ist heutzutage tatsàchlich meist egal, wenn Du die Abfrage immer neu
laufen làsst und die Listbox neu befüllst.

Wenn Du eine Abfrage hast, die störend langsam làuft, dann lass sie nur
einmal laufen und mach die Filterung gemàß Text1 in der For Schleife,
die die ListBox füllt, etwa so

[...]

For lngCount = 0 To lngProductCount

If rst![D160Name1] & "" like Text1.Value & "*" then

varProductArray(lngCount, 0) = rst![D160Alpha] & ""
varProductArray(lngCount, 1) = rst![D160Name1] & ""
varProductArray(lngCount, 2) = rst![D160Fax] & ""
rst.MoveNext

End If

Next lngCount
[...]

Ähnliche fragen