XL xp VBA Listbox

Hallo zusammen.

Dieses Problem bereitet mir Kopfschmerzen:

Ich habe eine Listbox auf einem UserForm.
ColumnCount = 2
BoundColumn = 0
TextColumn = 0

In Spalte 0 stehen Überschriften für die Inhalte in Spalte 1.

Spalte 0 fülle ich mit der Anweisung:

.List() = Contract.PartnerInfoHeader()

Spalte 1 wollte ich füllen mit der Anweisung:

With Contract.Partner(FormPartnerIndex)
 For a = LBound(.PartnerInfo()) To UBound(.PartnerInfo())
 lbxPartnerInfo.List(a, 1) = .PartnerInfo(a)
 Next
End With

Ich bekomme an dieser Stelle aber die Fehlermeldung „Eigenschaft List konnte nicht gesetzt werden. Ungültiger Eigenschaftswert“.

Also habe ich es so versucht:

With Contract.Partner(FormPartnerIndex)
 lbxPartnerInfo.Column(1) = .PartnerInfo()
End With

und auch so:

With Contract.Partner(FormPartnerIndex)
 For a = LBound(.PartnerInfo()) To UBound(.PartnerInfo())
 lbxPartnerInfo.Column(1, a) = .PartnerInfo(a)
 Next
End With

Da kommt aber auch immer eine Fehlermeldung.

Wie bekomme ich meine Daten in Spalte 1 hinein?

Vielen Dank für Eure Hilfe

VG
Carsten

Hallo Carsten,

mir ist da zuviel Unbekanntes.

Kannst du eine Beispielmappe basteln wo das auftritt und hochladen mit FAQ:2606

Gruß
Reinhard

Hallo Carsten,

in einer Listbox ist es mir noch nie gelungen, auf die Spalten einzel zuzugreifen. Ich weiß nicht, ob das geht.

Um die Listbox mit mehreren Spalten zu füllen müssen die Inhalte durch Tabs getrennt sein. Ich würde einfach immer die ganze Zeile neu schreiben.

List1.AddItem "Sp1" + Chr(9) + "Sp2" + Chr(9) + "Sp3"

Gruß Rainer

Hallo Rainer,

in einer Listbox ist es mir noch nie gelungen, auf die Spalten
einzel zuzugreifen. Ich weiß nicht, ob das geht.

leider sind die Eigenschaften einer Listbox in VB und VBA unterschiedlich.
In VBa geht sowas:

ListBox1.List(1,1)=„Huhu“
bzw.
MsgBox ListBox1.List(1,1)

Das wäre dann der Wert aus der zweiten Reihe und zweiter Spalte der ListBox.

Und, in Excel-Vba kann man u.a. die Breite einer jeden Spalte der ListBox festlegen, ich VB fand ich dazu nix.

Um die Listbox mit mehreren Spalten zu füllen müssen die
Inhalte durch Tabs getrennt sein. Ich würde einfach immer die
ganze Zeile neu schreiben.

Bist du dir sicher daß du dann eine mehrspaltige ListBox hast oder nur eine durch Tab formatierte einzige Spalte?

Gruß
Reinhard

Hallo Reinhard,

Bist du dir sicher daß du dann eine mehrspaltige ListBox hast
oder nur eine durch Tab formatierte einzige Spalte?

ja. Die Zeile mit den beiden tabs wird nur korrekt angezeigt, wenn .ColumnCount auf ‚3‘ steht.

In VB6 scheint das alles zu sein, was man damit anfangen kann. Um auf einzelne Spalten zuzugreifen verwendet man dann eben etwas anderes, die Listbox ist da ungeeignet. Aber in VBA scheint das ja anders zu sein, das wusste ich nicht.

Gruß Rainer

hallo Rainer,

Bist du dir sicher daß du dann eine mehrspaltige ListBox hast
oder nur eine durch Tab formatierte einzige Spalte?

ja. Die Zeile mit den beiden tabs wird nur korrekt angezeigt,
wenn .ColumnCount auf ‚3‘ steht.

dann kann ich da nicht mitreden, bei VB5 ListBox gibt es das nicht:

http://www.bilder-space.de/show.php?file=05.07dpldWG…

Und, meine Recherche im Internet ergab daß die Standard Listbox von VB keine Mehrspaltigkeit unterstützt.
Mit Tricks kann man sie formatieren: http://www.vbarchiv.net/tipps/details.php?id=1130

Gruß
Reinhard

Hallo Rainer, hallo Reinhard.

Ich habe inzwischen herausgefunden:

Spalte 0 fülle ich mit der Anweisung:

.List() = Contract.PartnerInfoHeader()

„PartnerInfoHeader“ ist aber nur ein eindimensionales Array. Wenn ich es zweidimensional mache, dann hat die ListBox auch zwei Spalten, so wie vorgesehen. Da gibt es nur folgendes Problem: Bei einem Array kann man immer nur die letzte Dimension neu dimensionieren. Die Überschriften für die „Infos“ stehen aber in der ersten Dimension.
Bei dem Versuch mit dem zweidimensionalen Array habe ich festgestellt, daß die Inhalte des Arrays beim Übertragen in die Listbox transponiert werden. Das bedeutet dann: Einlesen wohl nur in einer ForNext-Schleife.

Ich könnte also zwei Listboxex benutzen. Habe ich auch ausprobiert, aber man bekommt die linke einfach nicht
unter die rechte. Da kann man noch so oft auf „In den Hintergrund“ klicken.

So, jetzt muß ich erstmal zur Arbeit.
Vielen Dank für Eure Hilfe
VG
Carsten

Spalte 1 wollte ich füllen mit der Anweisung:

With Contract.Partner(FormPartnerIndex)
For a = LBound(.PartnerInfo()) To UBound(.PartnerInfo())
lbxPartnerInfo.List(a, 1) = .PartnerInfo(a)
Next
End With

Ich bekomme an dieser Stelle aber die Fehlermeldung
„Eigenschaft List konnte nicht gesetzt werden. Ungültiger
Eigenschaftswert“.

Also habe ich es so versucht:

With Contract.Partner(FormPartnerIndex)
lbxPartnerInfo.Column(1) = .PartnerInfo()
End With

und auch so:

With Contract.Partner(FormPartnerIndex)
For a = LBound(.PartnerInfo()) To UBound(.PartnerInfo())
lbxPartnerInfo.Column(1, a) = .PartnerInfo(a)
Next
End With

Da kommt aber auch immer eine Fehlermeldung.

Wie bekomme ich meine Daten in Spalte 1 hinein?

Vielen Dank für Eure Hilfe

VG
Carsten

Hallo Carsten,

was du genau willst ist mir nur vage klar, du willst die zweite Spalte einer ListBox auf einen Rutsch neu befüllen?

Vielleicht dann so, schreibe mal in A1:B6 was beliebiges hinein, dann eine UF mit Listbox und Commandbutton.
Durch RowSource wird das Problem verlagert, Änderungen in der Listbox erreichst du durch Ändern der Werte in Spalte A bzw. B.

@Thomas, wenn du mitliest, warum brauch ich eigntlich das Transpose?
laße ich es weg erscheinen nur Dreier in der zweiten Spalte der Listbox.

Private Sub CommandButton1\_Click()
Dim a(5), N
For N = 0 To 5
 a(N) = (N + 1) \* 3
Next N
Range("B1:B6") = Application.Transpose(a)
End Sub
'
Private Sub UserForm\_Initialize()
ListBox1.ColumnCount = 2
ListBox1.RowSource = "A1:B6"
End Sub

Gruß
Reinhard

Hallo Reinhard.

was du genau willst ist mir nur vage klar, du willst die
zweite Spalte einer ListBox auf einen Rutsch neu befüllen?

Genau so ist es. Im Prinzip habe ich hier ein Eigenschaftenfenster, daß genauso funktionieren soll, wie das Eigenschaftenfenster im Editor: Ich wähle in einer ersten Listbox einen Vertragspartner aus (im Eigenschaftenfenster ein Control) und in der zweiten Listbox werden in Spalte 1 die Informationen zu diesem Vertragspartner (im Eigenschaftenfenster die Eigenschaften des Controls) angezeigt. Das Ganze dann noch 'mal drei Kaskarden vertieft.
Die Daten stehen nicht auf einem Tabellenblatt, sondern werden aus einer Datendatei gelesen, in der ich den benutzerdefinierten Typen „Contract“ speichere.

Es wäre ziemlich praktisch gewesen, wenn das mit dem „Schreiben in einem Rutsch“ gegangen wäre. Ich kapier’ einfach nicht, warum :frowning:

VG
Carsten