Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1184to1188
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
Listbox auf 10 Spalten begrenzt?
abu
Hallo zusammen!
Hab ein kleines Problem und hoffe Ihr koennt mir helfen.
Habe eine Listbox mit 14 Spalten und hole mir die Daten zum editieren so in die Textboxen:
TB150.Value = ListBox150.Column(0)
Nun steigt er nach der 10ten Spalten immer aus. Ich vermute mal die Listbox ist auf 10 Spalten begrenzt.
Kann ich das irgendwie umgehen?
Beste Gruesse
Abu
AW: Listbox auf 10 Spalten begrenzt?
05.11.2010 12:27:54
Rudi
Hallo,
kommt drauf an, wie du sie befüllst.
Private Sub UserForm_Activate()
With ListBox150
.ColumnCount = 14
.List = Range("A1:N10").Value
End With
End Sub

klappt.
Gruß
Rudi
AW: Listbox auf 10 Spalten begrenzt?
05.11.2010 12:59:36
abu
Hallo Rudi,
mmmh wenn ich das mal wuesste, soweit bin ich noch nicht.
Problem ist alle Daten einen Datensatzes muss in einer Zeile stehen. Ich bin erst soweit einen neuen Datensatz einzulesen. Die Daten kommen aus einer anderen Listbox (weniger als 10 Spalten). Dann kommts in die Listbox mit den 14 Spalten da ich die Daten der bestellten Ware mit den Daten der falschen Ware buendeln will.
Anschliessend wuerde ich mit folendem Code die Daten in die Tabelle schreiben:
Private Sub CommandButton1_Click()
Dim lngRow&, lngCol&, nCount&
Dim ArrayData()
With ListBox1
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("A1").Resize(, UBound(ArrayData)) = Application.Transpose(ArrayData)
End Sub

und mit dem Code aus der Tabelle holen:
Private Sub CommandButton2_Click()
Dim ArrayData, NewArray()
Dim nCount&, nCol&, nRow&
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
End Sub
Beide Codes hab ich von Tino und noch nicht in meinen integriert, wie gesagt soweit bin ich noch nicht.
Also noch mal die Frage, gehts das was ich so vor hab oder muss ich es auf 2 Listboxen verteilen?
Gruss
Abu
Anzeige
AW: Listbox auf 10 Spalten begrenzt?
06.11.2010 12:41:31
Tino
Hallo,
versuch es mal so.
With ListBox150
If .ListIndex > -1 Then
TB150.Value = .List(.ListIndex, 0)
TB151.Value = .List(.ListIndex, 1)
'usw...
End If
End With
oder mit einer Schleife in etwa so
Dim i As Integer
With ListBox150
If .ListIndex > -1 Then
For i = 0 To .ColumnCount - 1
Me("TB" & i + 150) = .List(.ListIndex, i)
Next i
End If
End With
Gruß Tino
Liest falsche Daten ein
08.11.2010 09:50:56
abu
Hallo Tino,
schoen das Du mir mal wieder helfen willst.
Versuche gerade deinen Code umzusetzen aber bekomme es leider nicht hin.
Habe deinen Code nur geringfuegig geaendert:
Sub ListBox1_Click()
With Sheets("Complaint&Return") 'Tabelle angeben
ArrayData = .Range(lngR & ":52", .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
End Sub
ListBox1 soll eine Suchfunktion darstellen, bei Click sollen all Daten des Datensatzes in die dazugehoerigen Boxen geladen werden.
Was ich moechte ist das er ab Spalte 'AB' (52) die ListBox150 fuellt und zwar fuer jeder Zeile der Listbox 13 Spalten nach rechts geht. Also:
Zeile 1 von AB bis BM, sollte BN keinen Wert haben gibt es keine 2te Zeile, wenn nicht dann
Zeile 2 von BN bis BZ, etc
Nun was macht er im Moment: er beginnt immer bei A und ich versteh nicht ganz warum.
Zumindest macht er mir die Textboxen voll, da hab ich nicht das Problem das er nach Spalte 10 aufhoert.
Wie muss ich denn vorgehen bei der Initialisierung, damit ich auch bei neuen Datensaetzen mehr als 10 Spalten in die Textboxen einlesen kann? Mit diesem Code funktioniert zwar allerdings bleiben die ersten Zeilen frei und meine Daten kommen erst ganz weit unten.
With Me.ListBox150
.ColumnCount = 13
.List = Range(lngR & "52" & lngR & ":77").Value
.ColumnWidths = "50pt;55pt;30pt;30pt;30pt;50pt;8,5pt;50pt;55pt;30pt;30pt;50pt;8,5pt"
End With
Hoffe Du kannst mir noch mal helfen.
Beste Gruesse
Abu
Anzeige
AW: Liest falsche Daten ein
08.11.2010 10:44:06
Tino
Hallo,
was mich etwas irritiert und nicht so passen will ist diese Zeile.
.List = Range(lngR & "52" & lngR & ":77").Value
Was ist zu diesem Zeitpunkt lngR, ich denke es ist eine Variable vom Typ Long
Wenn angenommen lngR = 52 ist, steht in dieser Zeile
.List = Range("525252:77").Value
Schaut sehr merkwürdig aus, da passt was nicht.
Gruß Tino
lngR ist Long
08.11.2010 11:18:58
abu
Hallo Tino,
Ja Du hast recht es ist ein Long. Da ich mir nicht anders zu helfen wusste habe ich die Variable einfach aus diesem Sub rausgenommen und ganz oben bestimmt damit ich darauf zugreifen kann. Zum Zeitpunkt der Initialisierung brauch ich die Listbox150 nicht. Ich habs nur reingenommen um beim einlesen eines neuen Datensatzes mehr als 10 Spalten von der Listbox in die Textboxen bekomme, ich brauch 13.
Rudi meinte es komme darauf an wie man die Listbox befuellt wenn man mehr als 10 Spalten ansprechen will... Wenn ich einen neunen Datensatz anlege gibts es eigentlich keine Werte aus dem Datenblatt. Ich hatte die komplette Zeile gar nicht in meinem Code und hab sie nur aufgenommen damit ich mehr als 10 Spalten editieren kann.
Gruss
Abu
Anzeige
AW: lngR ist Long
08.11.2010 12:21:14
Tino
Hallo,
Rudi hat vollkommen recht mit AddItem geht es nur so.
Du musst aber keinen Zellbereich zuweisen Du kannst es auch mit einem Array mit der entsprechenden
Größe einstellen,
danach löschst Du die erste Zeile wieder, jetzt funktioniert es auch mit der AddItem Methode
Beispiel:
Dim i As Integer, tmpArray()
With ListBox1
.ColumnCount = 13
ReDim tmpArray(1 To 1, 1 To .ColumnCount)
.List = tmpArray
Erase tmpArray
.RemoveItem 0
.AddItem 0
For i = 1 To 12
.List(.ListCount - 1, i) = i
Next i
End With
Du musst eben auch daran denken,
dass der erste Eintrag (erste Zeile, erste Spalte) den Index 0, der zweite 1 usw... hat.
Gruß Tino
Anzeige
Springt aus Sub in anderes?
08.11.2010 14:05:34
abu
Hallo Tino,
ok, das funktioniert super! Ich kann jetzt bei einem neuen Datensatz alle Spalten in die Textboxen laden.
With ListBox150
If .ListIndex > -1 Then
TB150.Value = .List(.ListIndex, 0)
TB151.Value = .List(.ListIndex, 1)
TB152.Value = .List(.ListIndex, 2)
TB153.Value = .List(.ListIndex, 3)
TB154.Value = .List(.ListIndex, 4)
TB155.Value = .List(.ListIndex, 5)
TB156.Value = .List(.ListIndex, 6)
TB157.Value = .List(.ListIndex, 7)
TB158.Value = .List(.ListIndex, 8)
TB159.Value = .List(.ListIndex, 9)
TB160.Value = .List(.ListIndex, 10)
TB161.Value = .List(.ListIndex, 11)
TB162.Value = .List(.ListIndex, 12)
a = .ListIndex
End If
End With
a soll die Zeilennummer speichern um sie wieder zurueckzuschreiben. Dafuer habe ich den Code:
With ListBox150
.List(a, 0) = TB150.Value
.List(a, 1) = TB151.Value
.List(a, 2) = TB152.Value
.List(a, 3) = TB153.Value
.List(a, 4) = TB154.Value
.List(a, 5) = TB155.Value
.List(a, 6) = TB156.Value
.List(a, 7) = TB157.Value
.List(a, 8) = TB158.Value
.List(a, 9) = TB159.Value
.List(a, 10) = TB160.Value
.List(a, 11) = TB161.Value
.List(a, 12) = TB162.Value
End With
Er aendert auch den ersten Eintrag aber nicht den Rest. Wenn ich die Zeilen einzelnd ablauf, dann springt er von hier .List(a, 0) = TB150.Value ins Sub zum laden der Textboxen...
Warum macht er das?
Gruss
Abu
Anzeige
Lag am Click, Laden in Userform
08.11.2010 16:37:04
abu
Hallo Tino,
es lag am Click-Ereignis. Ich vermute mal das er nach dem editieren der ersten Spalte direkt das Click-Ereignis ausloest und deshalb ins andere Sub springt.
Habe es nun umgestellt auf Doubleclick und nun funktioniert auch das. Super!
Nun bin ich wieder beim einlesen und schreiben ins Tabellenblatt. Um ehrlich zu sein verstehe ich den Code nicht... So wie ich den jetzt hab, liest er von Spalte A an ein. Kannst Du mir da vllt. noch ein bissel helfen:
With Sheets("Complaint&Return") 'Tabelle angeben
ArrayData = .Range(lngR & ":52", .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
Gruesse
Abu
Anzeige
AW: Lag am Click, Laden in Userform
09.11.2010 08:50:57
Tino
Hallo,
soweit ich mich erinnere wolltest Du damals die erste Zeile einer Tabelle
in eine Listbox mit 13 Spalten reinschreiben,
alle 13 Einträge sollte eine neue Zeile in der Listbox angefangen werden.
Wie willst Du es jetzt machen? Eventuell kann auch eine Beispiel- Datei helfen.
Das Click - Ereignis kannst Du auch mit Hilfe der Tag-Eigenschaft oder einer Variablen abfangen.
Beispiel:
Private Sub CommandButton1_Click()
Me.Tag = "1"
With ListBox1
'Code
End With
Me.Tag = ""
End Sub
Private Sub ListBox1_Click()
If Me.Tag = "1" Then Exit Sub
'Code
End Sub 
Gruß Tino
Anzeige
Problem geloest, Danke!
09.11.2010 09:31:24
abu
Hallo Tino,
richtig ab Spalte BA soll geschreiben/gelesen werden und alle 13 Spalten soll eine neue Zeile in der Listbox anfangen.
Fuers lesen habe ich nun folgenden Code:
With Sheets("Complaint&Return") 'Tabelle angeben
ArrayData = .Range("BA" & lngR & ":BM" & lngR, .Cells(lngR, .Columns.Count).End(xlToLeft)) '.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
und fuers schreiben folgenden:
Dim lngRow&, lngCol&, nCount&
Dim ArrayData()
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("BA" & lngR).Resize(, UBound(ArrayData)) = Application.Transpose(ArrayData)
Beide funktionieren so wie ich das moechte!
Vielen Dank fuer Deine tolle Hilfe.
Beste Gruesse
Abu
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige