Supportnet / Forum / Tabellenkalkulation
nur bestimmte zeilen in userform/lisbtbox anzeigen lassen!
Frage
hallo,
folgendes userform/listbox-problem:
in der listbox in einer userform lasse ich mir alle gefüllten zeilen der tabelle1 ab der 3.zeile von der spalte a bis zur spalte h anzeigen (siehe makrotext weiter unten). ich möchte aber, dass in der listbox nicht alle zeilen mit inhalt angezeigt werden, sondern nur die zeilen, bei der die entsprechenden zellen in spalte i (spalte 9) nicht leer sind. die zeilen, bei denen die entsprechenden zellen in spalte i leer sind, sollen also nicht in der listbox erscheinen.
wie muss ich nun das nachfolgende makro abändern?
Private Sub Userform_initialize()
Dim i as integer
sheets("tabelle1").activate
i= activesheet.usedrange.rows.count
with userform1.listbox1
.columnCount = 8
.columnHeads = true
.rowSource = "tabelle1!A3:H" & i
.columnWidths = "2cm;2cm;2,1cm;2,1cm;3,5cm;3,2cm;3cm;1,2cm"
end with
end sub
bin für jeden tipp dankbar!
gruss,
goofe
Antwort 1 von struppi
Hallo,
Statt die .rowSource Eigenschaft zu setzen mußt Du mit der addItem-Funktion
jede einzelne Zelle in die Listbox schreiben. Das ermöglicht Dir die Zellen vorher auf ihren Inhalt zu prüfen.
gruß struppi
Statt die .rowSource Eigenschaft zu setzen mußt Du mit der addItem-Funktion
jede einzelne Zelle in die Listbox schreiben. Das ermöglicht Dir die Zellen vorher auf ihren Inhalt zu prüfen.
gruß struppi
Antwort 2 von goofe
hallo struppi,
wie soll das denn aussehen mit der additem-funktion? hab nämlich meinen makro-text aus einem buch und bin absoluter makro-anfänger:
Private Sub Userform_initialize()
Dim i as integer
sheets("tabelle1").activate
i= activesheet.usedrange.rows.count
with userform1.listbox1
.columnCount = 8
.columnHeads = true
.rowSource = "tabelle1!A3:H" & i
.columnWidths = "2cm;2cm;2,1cm;2,1cm;3,5cm;3,2cm;3cm;1,2cm"
end with
end sub
was muss ich wie in diesem text ändern? kann es ein, dass "rowsource" aber notwendig ist für die überschriften der spalten in der listbox? diese überschriften werden nämlich trotzdem benötigt!
danke im voraus!
gruss,
goofe
wie soll das denn aussehen mit der additem-funktion? hab nämlich meinen makro-text aus einem buch und bin absoluter makro-anfänger:
Private Sub Userform_initialize()
Dim i as integer
sheets("tabelle1").activate
i= activesheet.usedrange.rows.count
with userform1.listbox1
.columnCount = 8
.columnHeads = true
.rowSource = "tabelle1!A3:H" & i
.columnWidths = "2cm;2cm;2,1cm;2,1cm;3,5cm;3,2cm;3cm;1,2cm"
end with
end sub
was muss ich wie in diesem text ändern? kann es ein, dass "rowsource" aber notwendig ist für die überschriften der spalten in der listbox? diese überschriften werden nämlich trotzdem benötigt!
danke im voraus!
gruss,
goofe
Antwort 3 von Guenter
Ich würde ein neues Arbeitsblatt per VBA anlegen, indem die korrekte Tabelle für die ListBox steht.
Also alle Zeilen mit Spalte I = "" ausschneiden.
Dann kannst du mit RowSource die Tabelle2 anwählen.
Die temporäre Tabelle kann dann versteckt oder wieder gelöscht werden, nach Bedarf.
Gruß
Günter
Also alle Zeilen mit Spalte I = "" ausschneiden.
Dann kannst du mit RowSource die Tabelle2 anwählen.
Die temporäre Tabelle kann dann versteckt oder wieder gelöscht werden, nach Bedarf.
Gruß
Günter
Antwort 4 von struppi
Hallo,
Neues Arbeitsblatt anlegen ist auch nicht schlecht...
Trotzdem noch eine Code zum basteln und knobeln...
gruß struppi
Neues Arbeitsblatt anlegen ist auch nicht schlecht...
Trotzdem noch eine Code zum basteln und knobeln...
Private Sub Userform_initialize()
Dim i, x, z As Integer, r As Range
Sheets("tabelle1").Activate
i = ActiveSheet.UsedRange.Rows.Count
With UserForm1.ListBox1
.ColumnCount = 8
.ColumnHeads = True
.ColumnWidths = "2cm;2cm;2,1cm;2,1cm;3,5cm;3,2cm;3cm;1,2cm"
End With
With ActiveSheet
z = 0
For x = 3 To i + 3 'x erste zu lesende Zeile
If .Cells(x, 9) <> "" Then 'Bedingung (Spalte 9 muß Wert enthalten)
UserForm1.ListBox1.AddItem .Cells(x, 1)
For y = 1 To 8
UserForm1.ListBox1.List(z, y - 1) = .Cells(x, y)
Next
z = z + 1
End If
Next
End With
End Sub
gruß struppi
Antwort 5 von goofe
hallo struppi,
dein vorschlag funktioniert soweit, bis auf 2 kleine ausnahmen:
1.) in der spalte f und g in der tabelle stehen immer uhrzeiten im format 00:00. in der listbox werden diese uhrzeiten irgendwie umgewandelt und es steht dann z.B. 0,3326388888888....! wie muss ich was umändern, um auch die korrekte uhrzeit angezeigt zu bekommen?
2.) ursprünglich hatte ich mit meinem makrotext (siehe weiter oben) in der listbox oben die spaltenüberschriften aus der zeile 2 stehen. jetzt stehen aber nicht mehr die spaltenüberschriften aus der 2. zeile fix in der listbox. die ursache ist vermutlich das weglassen des ausdrucks "rowsource"? hast du eine idee, wie ich was umändern muss, dass wieder diese spaltenüberschriften in der listbox stehen?
vielen dank!
gruss,
goofe
dein vorschlag funktioniert soweit, bis auf 2 kleine ausnahmen:
1.) in der spalte f und g in der tabelle stehen immer uhrzeiten im format 00:00. in der listbox werden diese uhrzeiten irgendwie umgewandelt und es steht dann z.B. 0,3326388888888....! wie muss ich was umändern, um auch die korrekte uhrzeit angezeigt zu bekommen?
2.) ursprünglich hatte ich mit meinem makrotext (siehe weiter oben) in der listbox oben die spaltenüberschriften aus der zeile 2 stehen. jetzt stehen aber nicht mehr die spaltenüberschriften aus der 2. zeile fix in der listbox. die ursache ist vermutlich das weglassen des ausdrucks "rowsource"? hast du eine idee, wie ich was umändern muss, dass wieder diese spaltenüberschriften in der listbox stehen?
vielen dank!
gruss,
goofe
Antwort 6 von struppi
Hallo goofe,
Naja, das erste Problem ist schnell gelöst. Dann korrigier mal eine codezeile wie folgt:
Aaaber... das mit den Überschriften krieg ich nicht hin.
rowsource hat damit nichts zu tun.
Man kann rowsource und additem nicht gleichzeitig verwenden.
Die Überschrift wird mit .columnHeads=true aktiviert und würde mit false deaktiviert.
Ich finde nirgens einen Hinweis, wie ich bei Verwendung von additem die Überschriften der Listbox beschreiben kann.
Da könnte sich jetzt wirklich mal ein "Knobelfreund" melden und mir das verraten....und Dir natürlich auch ;-)
gruß struppi
Naja, das erste Problem ist schnell gelöst. Dann korrigier mal eine codezeile wie folgt:
UserForm1.ListBox1.List(z, y - 1) = .Cells(x, y).Text
Aaaber... das mit den Überschriften krieg ich nicht hin.
rowsource hat damit nichts zu tun.
Man kann rowsource und additem nicht gleichzeitig verwenden.
Die Überschrift wird mit .columnHeads=true aktiviert und würde mit false deaktiviert.
Ich finde nirgens einen Hinweis, wie ich bei Verwendung von additem die Überschriften der Listbox beschreiben kann.
Da könnte sich jetzt wirklich mal ein "Knobelfreund" melden und mir das verraten....und Dir natürlich auch ;-)
gruß struppi
Antwort 7 von struppi
Hi goofe,
...da meldet sich wohl niemand mehr.
Dann hätten wir ja immer noch die Möglichkeit, die Günther vorschlug.
Das müßte dann etwa so aussehen:
Hab mal selbst nach der Ursache des Überschriftenproblems gesucht und mußte feststellen, daß nicht nur wir keine Lösung finden. Die Listbox unter excel und word hat scheinbar ein Problem mit Übrschriften bei Verwendung von additem.
gruß struppi
...da meldet sich wohl niemand mehr.
Dann hätten wir ja immer noch die Möglichkeit, die Günther vorschlug.
Das müßte dann etwa so aussehen:
Private Sub Userform_initialize()
Dim i, x, z, y As Integer
Sheets.Add
ActiveSheet.Name = "temp"
Sheets("tabelle1").Activate
i = Sheets("tabelle1").UsedRange.Rows.Count
With UserForm1.ListBox1
.ColumnCount = 8
.ColumnHeads = True
.ColumnWidths = "2cm;2cm;2,1cm;2,1cm;3,5cm;3,2cm;3cm;1,2cm"
z = 1
For x = 2 To i + 2 'x erste zu lesende Zeile
If Sheets("tabelle1").Cells(x, 9) <> "" Or x = 2 Then 'Bedingung (außer überschriften)
For y = 1 To 8
Sheets("temp").Cells(z, y).Value = Sheets("tabelle1").Cells(x, y).Text
Next
z = z + 1
End If
Next
.RowSource = "temp!a2:h" & z - 1
.ColumnHeads = True
Application.DisplayAlerts = False
Sheets("temp").Delete
Application.DisplayAlerts = True
End With
Hab mal selbst nach der Ursache des Überschriftenproblems gesucht und mußte feststellen, daß nicht nur wir keine Lösung finden. Die Listbox unter excel und word hat scheinbar ein Problem mit Übrschriften bei Verwendung von additem.
gruß struppi

