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
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.
„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
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
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