Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Suchen und Listbox füllen | Herbers Excel-Forum


Betrifft: Suchen und Listbox füllen von: Frank H.
Geschrieben am: 14.11.2009 08:47:35

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.

  

Betrifft: AW: Suchen und Listbox füllen von: Nepumuk
Geschrieben am: 14.11.2009 09:10:06

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


  

Betrifft: @Nepumuk (gehört nicht zum Thema Excel) von: Tino
Geschrieben am: 14.11.2009 09:23:34

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


  

Betrifft: AW: @Nepumuk (gehört nicht zum Thema Excel) von: Nepumuk
Geschrieben am: 14.11.2009 09:38:59

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


  

Betrifft: danke schon mal oT. von: Tino
Geschrieben am: 14.11.2009 10:04:21




  

Betrifft: AW: danke schon mal oT. von: Nepumuk
Geschrieben am: 16.11.2009 08:30:20

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


  

Betrifft: danke von: Tino
Geschrieben am: 16.11.2009 14:51:51

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


  

Betrifft: vielleicht wäre ein Beispiel nicht schlächt oT. von: Tino
Geschrieben am: 14.11.2009 09:10:42




  

Betrifft: Nepumuk hat wie immer recht. oT. von: Tino
Geschrieben am: 14.11.2009 09:13:22




  

Betrifft: Nepumuk hat auch nicht immer recht von: Nepumuk
Geschrieben am: 14.11.2009 09:35:13

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


  

Betrifft: hier wird doch keiner geschlächtet. von: Tino
Geschrieben am: 14.11.2009 10:13:34

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


  

Betrifft: AW: hier wird doch keiner geschlächtet. von: Frank H.
Geschrieben am: 14.11.2009 18:55:25

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.


  

Betrifft: kenne keine Seite, sorry von: Tino
Geschrieben am: 14.11.2009 19:26:36

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


  

Betrifft: AW: Suchen und Listbox füllen von: Gerd L
Geschrieben am: 14.11.2009 20:33:48

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


Beiträge aus den Excel-Beispielen zum Thema "Suchen und Listbox füllen"