Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1628to1632
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

Listbox leer lassen

Listbox leer lassen
20.06.2018 08:50:46
Philip
Hallo zusammen
Ich habe einen Code um eine Listbox zu füllen.
Es kann jedoch sein dass in einer Zeile jede Zelle gefüllt ist und in einer anderen ist nur die hälfte gefüllt, wie kann ich es umgehen das mir eine Fehlermeldung erscheint wenn eine oder mehrere Zellen leer sind?
 Private Sub CommandButton1_Click()
Dim rngCell As Range
Dim strFirstAddress As String
With Worksheets("Mittelwerte").Range("E4:E700")
Me.ListBox1.Clear
Set rngCell = .Find(Me.TextBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
If Not rngCell Is Nothing Then
strFirstAddress = rngCell.Address
Do
With Me.ListBox1
.ColumnCount = 27
.ListIndex = -1
.AddItem
.List(.ListCount - 1, 0) = rngCell.Offset(0, -4).Value
.List(.ListCount - 1, 1) = Format(rngCell.Offset(0, -3), "hh:mm")
.List(.ListCount - 1, 2) = rngCell.Offset(0, -2).Value
.List(.ListCount - 1, 3) = rngCell.Offset(0, -1).Value
.List(.ListCount - 1, 4) = rngCell.Value
.List(.ListCount - 1, 5) = rngCell.Offset(0, 1).Value
.List(.ListCount - 1, 6) = rngCell.Offset(0, 2).Value
.List(.ListCount - 1, 7) = rngCell.Offset(0, 3).Value
.List(.ListCount - 1, 8) = rngCell.Offset(0, 4).Value
.List(.ListCount - 1, 9) = rngCell.Offset(0, 5).Value
.List(.ListCount - 1, 10) = rngCell.Offset(0, 6).Value
.List(.ListCount - 1, 11) = rngCell.Offset(0, 7).Value
.List(.ListCount - 1, 12) = rngCell.Offset(0, 8).Value
.List(.ListCount - 1, 13) = rngCell.Offset(0, 9).Value
.List(.ListCount - 1, 14) = rngCell.Offset(0, 10).Value
.List(.ListCount - 1, 15) = rngCell.Offset(0, 11).Value
.List(.ListCount - 1, 16) = rngCell.Offset(0, 12).Value
.List(.ListCount - 1, 17) = rngCell.Offset(0, 13).Value
.List(.ListCount - 1, 18) = rngCell.Offset(0, 14).Value
.List(.ListCount - 1, 19) = rngCell.Offset(0, 15).Value
.List(.ListCount - 1, 20) = rngCell.Offset(0, 16).Value
.List(.ListCount - 1, 21) = rngCell.Offset(0, 17).Value
.List(.ListCount - 1, 22) = rngCell.Offset(0, 18).Value
.List(.ListCount - 1, 23) = rngCell.Offset(0, 19).Value
.List(.ListCount - 1, 24) = rngCell.Offset(0, 20).Value
.List(.ListCount - 1, 25) = rngCell.Offset(0, 21).Value
.List(.ListCount - 1, 26) = rngCell.Offset(0, 22).Value
.ColumnWidths = "2cm;1cm;3.5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm; _
1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm"
End With
Set rngCell = .FindNext(rngCell)
Loop While Not rngCell Is Nothing And rngCell.Address  strFirstAddress
Else
MsgBox "Belag nicht Gefunden", 48
End If
End With
End Sub

Wie muss der Code angepasst werden?
Vielen Dank und Gruss

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox leer lassen
20.06.2018 09:09:29
Nepumuk
Hallo,
der Fehler kommt nicht wegen irgendwelcher leeren Zellen sondern weil du per List-Eigenschaft maximal 10 Spalten in die Listbox bringst. Du musst deine Daten erst in einem Array sammeln und dieses dann an die Listbox übergeben.
Gruß
Nepumuk
AW: Listbox leer lassen
20.06.2018 09:20:28
Philip
Hallo Nepumuk
Danke für deine rasche Antwort.
Kannst du mir evt dabei Helfen wie ich das hinbekomme? Ich habe noch nie mit Arrays gearbeitet.
Gruss Philip
AW: Listbox leer lassen
20.06.2018 09:29:29
Nepumuk
Hallo Philip,
habe ich mir gedacht und schon vorgearbeitet.
Private Sub CommandButton1_Click()
Dim rngCell As Range
Dim strFirstAddress As String, astrValues() As String
Dim ialngIndex As Long
With ListBox1
.Clear
.ColumnCount = 27
.ColumnWidths = "2cm;1cm;3.5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;" & _
"1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm;1,5cm"
End With
With Worksheets("Mittelwerte").Range("E4:E700")
Set rngCell = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
If Not rngCell Is Nothing Then
strFirstAddress = rngCell.Address
Do
ReDim Preserve astrValues(0 To 26, 0 To ialngIndex)
astrValues(0, ialngIndex) = rngCell.Offset(0, -4).Value
astrValues(1, ialngIndex) = Format$(rngCell.Offset(0, -3), "hh:mm")
astrValues(2, ialngIndex) = rngCell.Offset(0, -2).Value
astrValues(3, ialngIndex) = rngCell.Offset(0, -1).Value
astrValues(4, ialngIndex) = rngCell.Value
astrValues(5, ialngIndex) = rngCell.Offset(0, 1).Value
astrValues(6, ialngIndex) = rngCell.Offset(0, 2).Value
astrValues(7, ialngIndex) = rngCell.Offset(0, 3).Value
astrValues(8, ialngIndex) = rngCell.Offset(0, 4).Value
astrValues(9, ialngIndex) = rngCell.Offset(0, 5).Value
astrValues(10, ialngIndex) = rngCell.Offset(0, 6).Value
astrValues(11, ialngIndex) = rngCell.Offset(0, 7).Value
astrValues(12, ialngIndex) = rngCell.Offset(0, 8).Value
astrValues(13, ialngIndex) = rngCell.Offset(0, 9).Value
astrValues(14, ialngIndex) = rngCell.Offset(0, 10).Value
astrValues(15, ialngIndex) = rngCell.Offset(0, 11).Value
astrValues(16, ialngIndex) = rngCell.Offset(0, 12).Value
astrValues(17, ialngIndex) = rngCell.Offset(0, 13).Value
astrValues(18, ialngIndex) = rngCell.Offset(0, 14).Value
astrValues(19, ialngIndex) = rngCell.Offset(0, 15).Value
astrValues(20, ialngIndex) = rngCell.Offset(0, 16).Value
astrValues(21, ialngIndex) = rngCell.Offset(0, 17).Value
astrValues(22, ialngIndex) = rngCell.Offset(0, 18).Value
astrValues(23, ialngIndex) = rngCell.Offset(0, 19).Value
astrValues(24, ialngIndex) = rngCell.Offset(0, 20).Value
astrValues(25, ialngIndex) = rngCell.Offset(0, 21).Value
astrValues(26, ialngIndex) = rngCell.Offset(0, 22).Value
ialngIndex = ialngIndex + 1
Set rngCell = .FindNext(rngCell)
Loop Until rngCell.Address = strFirstAddress
ListBox1.Column = astrValues
Else
MsgBox "Belag nicht Gefunden", vbExclamation, "Hinweis"
End If
End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Listbox leer lassen
20.06.2018 09:41:39
Philip
Hallo
Super ich danke dir für die Rasche Lösung.
Kannst du mir das mit dem Array kurz und einfach erklären?
Gruss Philip
AW: Listbox leer lassen
20.06.2018 09:55:15
Nepumuk
Hallo Philip,
du musst dir ein Array wie eine Exceltabelle vorstellen. Im Gegensatz zu einer Exceltabelle die immer eine feste Zeilen und Spaltenzahl hat, kannst du diese in einem Array aber selbst bestimmen. Das geschieht in der Dim-Anweisung bzw. in einer ReDim-Anweisung. Dimensionierst du das Array mit einer Dim-Anweisung (Beispiel: Dim ´strArray(1 To 10) As String) kann es nachträglich nicht mehr geändert werden. Dimensionierst du es erst nachträglich mit der ReDim-Anweisung (die Dim Anweisung muss dabei so aussehen: Dim strArray() As String) kannst du die letzte Dimension des Arrays dynamisch ändern. Genau das mache ich in dem Makro:
Dim astrValues() As String
ReDim Preserve astrValues(0 To 26, 0 To ialngIndex)
Wobei das Schlüsselwort Preserve bewirkt dass die Daten die schon im Array sind nicht gelöscht werden. Ohne diesem werden die Werte im Array beim Redimenionieren auf Leer bzw. 0 gesetzt.
Gruß
Nepumuk
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige