Supportnet Computer
Planet of Tech

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

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


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


Antwort 4 von struppi

Hallo,
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

Antwort 6 von struppi

Hallo goofe,
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:


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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: