Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1084to1088
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
Nur beschriebene Zellen Listen
Sebastian
Hallo zusammen,
ich habe ein Programm in dem in einer Userform nach einem bestimmten Befehl eine Listbox aus einem Tabellenblatt befüllt wird, der Code dafür ist folgendermaßen:
ListBox2.AddItem Cells(zeiger, 4).Value
Zeiger bezieht sich dabei auf den Auswahlbereich
Alles funktioniert ganz wunderbar, mein Problem ist das auch Zellen gelistet werden in denen nix drinsteht. Das würde ich gerne ausschliessen, so das ich im Auswahlbereich des Tabellenblattes die Einträge nicht zwingend untereinanderschreiben muss, sondern auch mehrere Zellen nach unten Abstand lassen kann.
Würde ich das aktuell machen würde in der Listbox der erste eintrag in der ersten Zeilen erscheinen, dann die ganzen freien Zeilen gemäß der Anzahl der freien Zellen im Auswahlbereich und dann erst der nächste Eintrag. Das sieht in der Listbox natürlich voll doof aus. Wie kann ich das ändern ...
LG Sebastian

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Nur beschriebene Zellen Listen
04.07.2009 14:11:52
Tino
Hallo,
hier mal ein Beispiel, musst Du noch an Deinen Umgebung anpassen.
Dialog UserForm1 Option Explicit Private Sub UserForm_Initialize() Dim myAr, myList() Dim A As Long, B As Long 'Tabellenname und Zellbereich anpassen With Sheets("Tabelle1") myAr = Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) End With 'myList groß genug Dimensionieren Redim Preserve myList(Ubound(myAr) - 1) 'Daten Sammeln For A = 1 To Ubound(myAr) If myAr(A, 1) <> "" Then myList(B) = myAr(A, 1) B = B + 1 End If Next A 'auf nötige größe Dimensionieren Redim Preserve myList(B - 1) 'Datenliste an ListBox übergeben Me.ListBox1.List = myList End Sub


Gruß Tino

Anzeige
Anpassung gescheitert ;-)
04.07.2009 14:37:08
Sebastian
Hallo,
ich dachte mir schon das das irgendwie über eine Schleife funktionieren muss. Ich habe jetzt mal versucht den Code von dir für meine Zwecke anzupassen auch wenn ich ihn nur in Teilen verstehe
Dim myAr, myList()
Dim W As Long, X As Long
myAr = Cells(zeiger, 4)
'myList groß genug Dimensionieren
ReDim Preserve myList(UBound(myAr) - 1)
'Daten Sammeln
For W = 1 To UBound(myAr)
If myAr(W, 1) "" Then
myList(X) = myAr(W, 1)
X = X + 1
End If
Next W
'auf nötige größe Dimensionieren
ReDim Preserve myList(X - 1)
'Datenliste an ListBox übergeben
Me.ListBox2.List = myList
Ab ReDim Preserve myList(UBound(myAr) - 1) gehts nicht weiter weil er sagt Typen unverträglich, leider komm auch ich an der Stelle nicht weiter da ich die Befehle ReDim, Preserve und UBound erst gar nicht einordnen kann ... leider
Wahrscheinlich liegt der Fehler aber schon im Rangeprozess oder,
ich habe versucht den üblichen Auswahlbereich zu übergeben mit
myAr = Cells(zeiger, 4)
LG Sebastian
Anzeige
AW: Anpassung gescheitert ;-)
04.07.2009 14:51:05
Tino
Hallo,
Cells(Zeiger,4) muß dein gesamter Datenberich sein. Wie in meinem Beispiel die Spalte A ab A2 bis zur letzten gefüllten in Spalte A.
Gruß Tino
Lösung gefunden
04.07.2009 15:09:46
Sebastian
Hallo Tino,
Cells(Zeiger,4) ist eigentlich der gesamte Datenbereich, zeiger bezieht sich auf Zelle 5 - letzte zelle und die 4 dann eben auf die gewünschte Spalte ...
Ich habe jetzt mal mit Schleifen rumgefriggelt und bin auf folgende Lösung gestoßen die wunderbar funktioniert:
Dim rngRange As Range
For Each rngRange In ActiveSheet.Cells(zeiger, 4) 'jede Zelle einzeln aus Auswahlbereich
If rngRange.Value "" Then 'nur wenn zellen beschrieben
ListBox2.AddItem rngRange.Value 'Eintrag in die Listbox übernehmen
End If
Next rngRange
damit klappts
LG und Vielen Dank Sebastian
P.S.: Mit welcher Anweisung kann ich den Code hier im Forum eigentlich als VBA-Code anzeigen lassen, so schön wie du ?
Anzeige
Zitat - <pre>...</pre> Gruß owT
04.07.2009 17:32:43
Luc:-?
:-?
AW: Code im Forum
04.07.2009 20:53:55
Sebastian
Hallo ihr zwei,
vielen Dank für die Tipps,
wird gleich mal getestet

Dim rngRange As Range
For Each rngRange In ActiveSheet.Cells(zeiger, 4) 'jede Zelle einzeln aus Auswahlbereich
If rngRange.Value  "" Then 'nur wenn zellen beschrieben
ListBox2.AddItem rngRange.Value 'Eintrag in die Listbox übernehmen
End If
Next rngRange


sieht schon gut aus, jetzt die Befehle noch in bunt, na ich mach mich mal schlau
LG Sebastian

AW: Code im Forum
04.07.2009 21:21:10
Tino
Hallo,
So wie ich deinen Code sehe, besteht dieser aus einer Zelle.
Da sollte eigendlich schon dies reichen.
If cells(Zeile,4) "" then
...
End if
Gruß Tino
Anzeige
AW: Code im Forum
05.07.2009 11:54:36
Sebastian
Hallo Tino,
nein der besteht nicht aus einer Zelle. Das ganze bezieht sich auf eine ganze Spalte definiert über Zeiger:

Dim Problemanzahl As Long
Dim zeiger As Long
Problemanzahl = Cells(Rows.Count, 4).End(xlUp).Row 'Anzahl Einträge in Spalte Probleme  _
ermitteln
For zeiger = 5 To Problemanzahl       'Beginnend in Zeile fünf bis zum Listenende


das heisst Cells(Zeiger,4) bezieht sich auf die Spalte 4 (mit den Problemen) und in der Spalte 4 auf die 5Zelle bis zum letzten Eintrag in der Spalte.
Ohne Schleife mit nur einer Zeile komme ich da nicht aus denke ich, so habe ich dich jetzt verstanden
LG Sebastian

Anzeige
AW: Code im Forum
05.07.2009 12:06:01
Tino
Hallo,
For Each rngRange In ActiveSheet.Cells(zeiger, 4)
Ist doch eine Schleife über genau eine Zelle? Oder nicht!
Anstatt

Dim rngRange As Range
For Each rngRange In ActiveSheet.Cells(zeiger, 4) 'jede Zelle einzeln aus Auswahlbereich
If rngRange.Value  "" Then 'nur wenn zellen beschrieben
ListBox2.AddItem rngRange.Value 'Eintrag in die Listbox übernehmen
End If
Next rngRange


zu schreiben, müsste dies doch den gleichen Zweck erfüllen.


If ActiveSheet.Cells(zeiger, 4)  "" then
ListBox2.AddItem ActiveSheet.Cells(zeiger, 4).value
End If


Gruß Tino

Anzeige
Auch das geht (für mich seltsamerweise)
05.07.2009 12:31:57
Sebastian
Hallo Tino,
hab deinen Versuch gerade mal ausprobiert und ja es funktioniert,
wobei ich nicht so recht schnalle wieso. Er fragt ja nicht nur eine Zelle ab sondern auch hier dann den ganzen Auswahlbereich! Das können je nachdem bis über 100 Zellen und mehr sein ... so recht verstehen kann ich das noch nicht ... aber ich bin ja auch kein Experte ;-)
LG Sebastian
AW: Auch das geht (für mich seltsamerweise)
05.07.2009 13:07:14
Tino
Hallo,
weil die Variable Zeiger den Wert von der For Next Schleife bekommt.
Gruß Tino
Geschnallt ;-)
05.07.2009 14:38:11
Sebastian
Stimmt, da ist ja schon eine Schleife

For zeiger = 5 To Problemanzahl       'Beginnend in Zeile fünf bis zum Listenende
If ActiveSheet.Cells(zeiger, 4)  "" Then
ListBox2.AddItem ActiveSheet.Cells(zeiger, 4).Value
End If
Next


hab ich ganz verdrängt, dank dir nochmal
LG Sebastian

Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige