Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1116to1120
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Suchen und Listbox füllen

Suchen und Listbox füllen
Frank
Ein wunderschönen Guten Morgen!!!
Mittels nachstehendem Code suche ich in meinem Arbeitsblatt nach Daten und lasse sie in einer Listbox anzeigen:
Private Sub cmdSuchen_Click()
Dim lng As Long
Dim i As Integer
Application.ScreenUpdating = False
With frmEingabe
.ListBox1.Clear
Worksheets(1).Activate
i = 0
For lng = 11 To ActiveSheet.UsedRange.Rows.Count
If InStr(LCase(Cells(lng, 53).Value), LCase(.TextBox1.Value)) > 0 Then
.ListBox1.AddItem Cells(lng, 1).Text
.ListBox1.Column(0, i) = Cells(lng, 53).Text
.ListBox1.Column(1, i) = Cells(lng, 54).Text
.ListBox1.Column(2, i) = Cells(lng, 55).Text
.ListBox1.Column(3, i) = Cells(lng, 56).Text
.ListBox1.Column(4, i) = Cells(lng, 57).Text
.ListBox1.Column(5, i) = Cells(lng, 58).Text
.ListBox1.Column(6, i) = Cells(lng, 59).Text
.ListBox1.Column(7, i) = Cells(lng, 60).Text
.ListBox1.Column(8, i) = Cells(lng, 61).Text
.ListBox1.Column(9, i) = Cells(lng, 62).Text
.ListBox1.Column(10, i) = Cells(lng, 63).Text
.ListBox1.Column(11, i) = Cells(lng, 64).Text
.ListBox1.Column(12, i) = Cells(lng, 65).Text
.ListBox1.Column(13, i) = Cells(lng, 66).Text
.ListBox1.Column(14, i) = Cells(lng, 67).Text
.ListBox1.Column(15, i) = Cells(lng, 68).Text
.ListBox1.Column(16, i) = Cells(lng, 69).Row
i = i + 1
Else
End If
Next lng
End With
Application.ScreenUpdating = True
Dim zelle As Range
Dim sBegriff As Date
If IsDate(TextBox1) Then
sBegriff = CDate(TextBox1)
Else
MsgBox "Es muss für diese Suche immer ein Datum vorhanden sein!", _
vbInformation, "Hinweis"
End If
If sBegriff = 0 Then Exit Sub
Set zelle = Worksheets(1).Columns(53) _
.Find(sBegriff, LookAt:=xlWhole)
If zelle Is Nothing Then
MsgBox "Suchbegriff wurde nicht gefunden!"
End If
End Sub
Nun kommt aber ab der Zeile, welche ich fett markiert habe, eine Fehlermeldung. Was muss ich ändern, bzw. was mach ich um himmelswillen wieder einmal falsch?
Für Hilfen schon jetzt Danke!!!
Gruß Frank H.
AW: Suchen und Listbox füllen
14.11.2009 09:10:06
Nepumuk
Hallo,
eine Listbox per AddItem gefüllt kann maximal 10 Spalten haben. Schreib deine Suchergebnisse in ein dynamisches Array und übergib diese Array der Listbox. Damit hast du keine Grenze mehr.
Das Array übergibst du so:
ListBox1.List = DeinArray
Gruß
Nepumuk
@Nepumuk (gehört nicht zum Thema Excel)
14.11.2009 09:23:34
Tino
Hallo,
gehört zwar nicht hier hin, aber vielleicht kennst Du da eine Lösung.
Wie kann ich es in VB6 machen, eine ListBox ohne AddItem zu füllen.
Diese ListBox unterstützt diese Methode List1.List = Array nicht.
Habe zwar was gefunden um die ListBox mit SendMessage-API etwas zu beschleunigen
ist aber immer nicht zufriedenstellend.
Danke
Gruß Tino
Anzeige
AW: @Nepumuk (gehört nicht zum Thema Excel)
14.11.2009 09:38:59
Nepumuk
Hallo Tino,
hab ich noch nie benötigt, da muss ich am Montag im Büro nachschauen. Hier hab ich nur VB.net auf dem Rechner.
Schönes Wochenende
Nepumuk
danke schon mal oT.
14.11.2009 10:04:21
Tino
AW: danke schon mal oT.
16.11.2009 08:30:20
Nepumuk
Hallo Tino,
scheint tatsächlich nur per API ein bisschen schneller zu gehen. Aber wieso benutzt du nicht ein Datagrid? Das wäre für so etwas besser geeignet. Oder steig endlich auf VB.net um, da gibt es bessere Möglichkeiten.
Gruß
Nepumuk
danke
16.11.2009 14:51:51
Tino
Hallo,
Datagrid werde ich mal versuchen.
Auf VB.net umsteigen, mal schauen ob dafür der Platz bei mir im Hirn noch ausreicht. ;-)
Gruß Tino
vielleicht wäre ein Beispiel nicht schlächt oT.
14.11.2009 09:10:42
Tino
Nepumuk hat wie immer recht. oT.
14.11.2009 09:13:22
Tino
Nepumuk hat auch nicht immer recht
14.11.2009 09:35:13
Nepumuk
Hi Tino,
aber bitte nicht mich schlächten :-)
Was noch nicht ganz klar ist, erst wird die Listbox gefüllt wenn in Spalte 53 der Begriff aus der Textbox gefunden wurde. Dann wird festgestellt, dass da kein Datum drin ist und nichts gefunden werden kann. Auch die Konstruktion LCase(TextBox1.Value) deutet nicht unbedingt auf ein Datum hin, denn es gibt keine Groß- und Kleinschreibung bei Zahlen.
Am besten, Frank erklärt uns erst mal, was er sucht und was in der Listbox angezeigt werden soll.
Gruß
Nepumuk
Anzeige
hier wird doch keiner geschlächtet.
14.11.2009 10:13:34
Tino
Hallo,
obwohl in manschen Beiträgen wird gleich mit dem Holzknüppel draufgehauen ;-)
Aber zumindest habe ich erst gar nicht an die Begrenzung bei AddItem gedacht,
weil ich dies nicht mehr so oft verwende und meist über ListBox1.List = Array gehe (geht schneller)
und wenn ich doch mal AddItem verwende sind es meist weniger als 10 Spalten.
Gruß Tino
AW: hier wird doch keiner geschlächtet.
14.11.2009 18:55:25
Frank
Hallo Zusammen!
Euch herzlichen Dank!!!
Konnte mir anderweitig helfen. Bin für das Meiste in VBA noch nicht reif genug. Deshalb ist mir das Schreiben eines Array auch nicht möglich - bin wohl zu blöd - . Vielleicht könnte mir jemand eine Seite nennen, wo man das Erlernen könnte!
Danke!
Gruß Frank H.
Anzeige
kenne keine Seite, sorry
14.11.2009 19:26:36
Tino
Hallo,
weis nur dass es recht verwirrend ist wenn man dies noch nie gemacht hat.
(und bei VBA nur mit Recorder?).
Aber wenn Du eine Beispieldatei hochlädst kann ich Dir was einbauen,
kann aber nicht versprechen ob ich heute noch dazu komme.
Gruß Tino
AW: Suchen und Listbox füllen
14.11.2009 20:33:48
Gerd
Hallo Frank,
es ist nie zu früh u. selten zu spät.
Welche Sorte Daten in die Textbox1 eingegeben werden bzw. in Tabelle(1) in Spalte 53 stehen,
kam bisher nicht rüber. Daher nur ein Ansatz.
Private Sub cmdSuchen_Click()
Dim lng As Long, i As Long, j As Long
Dim myLbArray() As Variant
'Application.ScreenUpdating = False  'nach erfolgreichen Tests aktivieren
frmEingabe.ListBox1.Clear 'Listbox leeren
frmEingabe.ListBox1.ColumnCount = 17 'spaltenanzahl der Listbox festlegen
If Len(frmEingabe.TextBox1) = 0 Then  'Beispiel-Prüfung, ob Textbox1 leer ist
MsgBox "Es muss für diese Suche immer ein Wert in Textbox1 vorhanden sein!", _
vbInformation, "Hinweis"
Else
With Worksheets(1)
'Datenfelddimensionen festlegen
ReDim myLbArray(0 To 16, 0 To .UsedRange.Rows.Count - 11)
For lng = 11 To Worksheets(1).UsedRange.Rows.Count
'Bedingung in Tabelle prüfen
If InStr(LCase(Cells(lng, 53).Value), LCase(frmEingabe.TextBox1.Value)) > 0 Then
'in Datenfeld eintragen
For j = 0 To 15
myLbArray(j, i) = .Cells(lng, j + 53).Text
Next
myLbArray(j, i) = lng 'Zeilennummer der Tabelle
i = i + 1
End If
Next lng
End With
'Datenfeld auf gefüllte Eintraege verkleinern
ReDim Preserve myLbArray(0 To 16, 0 To i - 1)
'Listbox mit gedrehtem Datenfeld füllen
frmEingabe.ListBox1.List = Application.Transpose(myLbArray)
End If
Application.ScreenUpdating = True
End Sub
Gruß Gerd
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige