Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

ListCount zaehlt falsch

ListCount zaehlt falsch
abu
Hallo zusammen,
haenge mal wieder und hoffe Ihr koennt mir ein bissel helfen.
Ich lasse eine Listbox mit Daten aus der Tabelle befuellen (siehe Code unten). Zum Verstaendnis: Ab Spalte CA soll alle 13 Spalten eine neue Zeile anfangen. Soweit klappt auch alles.
Nun moechte ich gerne die Daten der Listbox weitergeben aber es tritt folgendes Problem auf:
Wenn die Listbox nur eine Zeile hat, dann ist der ListCount = 2
Wenn die Listbox 2 Zeilen hat, dann ist ListCount auch 2
Wieso ist der der ListCount bei einer Zeile nicht = 1?
With Sheets("Complaint&Return") 'Tabelle angeben
ArrayData = .Range("CA" & lngR & ":CN" & lngR, .Cells(lngR, .Columns.Count).End(xlToLeft))
End With
With ListBox150
.ColumnCount = 13 'Spalten einstellen oder fest vergeben
ReDim Preserve NewArray(1 To .ColumnCount, 1 To UBound(ArrayData, 2))
For nCount = 1 To UBound(ArrayData, 2)
If .ColumnCount = nCol Then nCol = 0
nCol = nCol + 1
If nCol = 1 Then nRow = nRow + 1
NewArray(nCol, nRow) = ArrayData(1, nCount)
Next
ReDim Preserve NewArray(1 To .ColumnCount, 1 To nRow)
.List = Application.Transpose(NewArray)
End With
Hoff Ihr koennt mir helfen.
Gruss
Abu

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: ListCount zaehlt falsch
23.11.2010 21:27:04
Gerd
Hallo Abu,
lasse deinen inhaltlich kaum veränderten Code mal so über ein leeres Blatt laufen.
Vielleicht wird dir dann manches klarer.
Sub test()
Dim ArrayData, Newarray()
Dim lngR As Long, nCol As Long, nRow As Long, nCount As Long
lngR = 3
With ActiveSheet
.Range("CA" & lngR & ":CN" & lngR).FormulaR1C1 = "=ADDRESS(ROW(), COLUMN())"
.Cells(lngR, 94).FormulaR1C1 = "=ADDRESS(ROW(), COLUMN())"
ArrayData = .Range("CA" & lngR & ":CN" & lngR, .Cells(lngR, .Columns.Count).End(xlToLeft))
ReDim Preserve Newarray(1 To 13, 1 To UBound(ArrayData, 2))
For nCount = 1 To UBound(ArrayData, 2)
If 13 = nCol Then nCol = 0
nCol = nCol + 1
If nCol = 1 Then nRow = nRow + 1
Newarray(nCol, nRow) = ArrayData(1, nCount)
Next
ReDim Preserve Newarray(1 To 13, 1 To nRow)
.Cells(10, 79).Resize(UBound(Newarray, 2), UBound(Newarray, 1)) = Application.Transpose( _
Newarray)
End With
End Sub
Gruß Gerd
Anzeige
AW: ListCount zaehlt falsch
24.11.2010 09:02:19
abu
Hallo Gerd,
vielen Dank fuer deine Unterstuetzung.
Hab es jetzt mal laufen lassen und ich stelle fest ich habe mich nicht gut ausgedrueckt. Ich kaempfe noch deinen Code zu verstehen, ist mit meinem begrentzten Wissen sehr schwer. Habe den Code auch von Tino bekommen der mir freundlicherweise geholfen hat.
Ich vermute mal Du willst darauf hinaus das alle 13 Spalten eine neue Zeile im Tabellenblatt anfaengt aber ich meinte eine neue Zeile in der Listbox. Ein Datensatz muss in einer Zeile stehen.
Eine weiteres Problem ist das nicht bekannt ist welche Spalten im 13 Spalten Block befuellt sind. Im Grunde moechte ich das er den ersten 13 Spalten Block ab 'CA' prueft. Ist dort eine Zelle befuellt soll eine Zeile in der Listbox eingefuegt werden. Dann soll er pruefen ob im zeiten 13 Spalten Block also ab 'CN' eine Zelle befuellt ist, wenn ja 2. Zeile in Listbox, usw. - wenn nein kann er aufhoeren.
Gruss
Abu
Anzeige
AW: Bestandsaufnahme
24.11.2010 21:11:43
Gerd
Hallo Abu,
ich habe eigentlich nur ColumnCount durch die Konstante 13 ersetzt. Dies ändert das Ergebnis nicht.
so wie ich das sehe, übernimmt der gezeigte Codeteil nur Werte aus dem Bereich einer Zeile in ArrayData, mindestens 14 Werte, evtl. noch ein paar Werte aus Zellen hinter Spalte "CN".
Dem Array ist es dabei schnurz, ob in allen Zellen "CAx:CNx" tatsächlich Werte drinnstehen.
Deshalb wird im Ergebnis die Ausgabe in der Listbox (13spaltig) stets zweizeilig.
Blieben zunächst die Fragen, ob Du das so haben möchtest und den Code von Tino hier richtig abgeschrieben hast.
Gruß Gerd
Anzeige
AW: Bestandsaufnahme
25.11.2010 09:19:43
abu
Hallo Gerd,
danke fuer deine Antwort. Zur Bestandsaufnahme: was ich erreichen moechte ist folgendes:
1.
- Pruefe den Bereich CAx:CMx (13 Spalten)
- ist eine Zelle befuellt schreibe alle Daten von CAx:CMx in die erste Zeile der Listbox (auch 13 Spalten)
- ListCount = 1 (weiter mit 2.)
- sind alle Zellen von CAx:CMx leer, dann Ende, Listbox leer.
2.
- pruefe den naechsten Bereich (CNx:CZx)
- ist eine Zelle befuellt schreibe alle Daten von CNx:CZx in die zweite Zeile der Listbox
- ListCount = 2 (weiter mit 3.)
- sind alle Zellen von CNx:CZx leer, dann Ende, Listbox nur 1 Zeile und ListCount = 1.
3. pruefe den naechsten Bereich (DAx:DMx)
...
Hier der original Code von Tino (Danke!):
With Tabelle1 'Tabelle angeben
ArrayData = .Range("A1", .Cells(1, .Columns.Count).End(xlToLeft))
End With
With ListBox1
.ColumnCount = 4 'Spalten einstellen oder fest vergeben
Redim Preserve NewArray(1 To .ColumnCount, 1 To Ubound(ArrayData, 2))
For nCount = 1 To Ubound(ArrayData, 2)
If .ColumnCount = nCol Then nCol = 0
nCol = nCol + 1
If nCol = 1 Then nRow = nRow + 1
NewArray(nCol, nRow) = ArrayData(1, nCount)
Next
Redim Preserve NewArray(1 To .ColumnCount, 1 To nRow)
.List = Application.Transpose(NewArray)
End With
Ich habe ihn fuer mich angepasst und da ich mir nicht anders zu helfen wusste, habe ich den Bereich von CAx:CNx (14 Spalten) eingestellt, ich glaube das sollte meine Pruefung sein ob es Daten fuer die zweite Zeile der Listbox gibt. Leider reicht diese Pruefung nicht mehr aus da ich eigentlich alle 13 Spalten pruefen muss. Ausserdem moechte ich nun mit dem ListCount weiterarbeiten, geht aber nur wenn er auch stimmt.
Gut, ich koennte hingehen und einfach pruefen ob die 2. Zeile der Listbox auch Werte hat und wenn nicht ihn einfach auf 1 zurueckstellen aber ich denke das ist kein guter Ansatz.
Ich schreibe die Daten zurueck in die Tabelle mit dem Code (natuerlich auch von Tino, Danke!):
With ListBox150
ReDim ArrayData(1 To .ListCount * .ColumnCount, 1 To 1)
For lngRow = 0 To .ListCount - 1
For lngCol = 0 To .ColumnCount - 1
nCount = nCount + 1
ArrayData(nCount, 1) = .List(lngRow, lngCol)
Next lngCol
Next lngRow
End With
Range("CA" & NeueZeile).Resize(, UBound(ArrayData)) = Application.Transpose(ArrayData)
Ich denke der ist OK, was meinst Du?
Nochmals Danke das Du dich mit mir auseinandersetzt und helfen moechtest.
Gruss
abu
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige