in einer Userform sollen mehrere Combos mit ein und
demselben Inhalt gefüllt werden. Die Namen der Combos
unterscheiden sich lediglich in der fortlaufenden Nummer.
Ich könnte jetzt für jede dieser Combos den Code kopieren
und einfügen. Um ein Überborden des Codes zu vermeiden,
würde ich dieses Befüllen aber gerne über eine Schleife
machen.
***
Private Sub CboRating1_DropButtonClick()
With CboRating1
.AddItem "Aaa/AAA"
.AddItem "Aa1/AA+"
.AddItem "Aa2/AA"
.AddItem "Aa3/AA-"
.AddItem "A2/A"
.AddItem "A3/A-"
.AddItem "Baa1/BBB+"
.AddItem "Baa2/BBB"
.AddItem "Baa3/BBB-"
.AddItem "Ba1/BB+"
.AddItem "Ba2/BB"
.AddItem "Ba3/BB-"
.AddItem "B1/B+"
.AddItem "B2/B"
.AddItem "B3/B-"
End With
End Sub
***
D.h. die "CboRating2" bis "CboRating9" sollen den selben
Inhalt haben.
Ist es überhaupt möglich so etwas per Schleife
darzustellen?
Vielen Dank schon einmal im Voraus.
cu
Götz
--
Excel 2000
Götz Alles:
Deklariere Dir ein Array
Dim Rating(1 To 15) As String
Rating(1) = "Aaa/AAA"
...
etc.
Das Zuweisen an eine ComboBox geht in einem Schritt mit
CboRating1.List = Rating()
Letzteres per Schleife könnte so aussehen:
For i = 1 To 9
Me.Controls("CboRating" & i).List = Rating()
Next i
Um das Array selbst per Schleife aufzufüllen, steckt zuwenig
Systematik drin, bzw. wäre das Austüfteln eines Terms
mehr Arbeit als das Tippen. Du brauchst es ja nur einmal.
Gruß aus Mainz
Michael
hervorragend! Funktioniert bestens.
Jetzt interessiert mich aber noch eines. Ich habe Deine
Tipps wie folgt eingebaut:
***
Private Sub CboRating1_DropButtonClick()
Dim Rating(1 To 15) As String
Dim i As Variant
Rating(1) = "Aaa/AAA"
Rating(2) = "Aa1/AA+"
Rating(3) = "Aa2/AA"
[snip]
For i = 1 To 9
Me.Controls("CboRating" & i).List = Rating()
Next i
End Sub
***
Wie schon gesagt - so klappt es auch.
Aber warum muß ich den Code unter "Private Sub
CboRating1_DropButtonClick()" einbinden? Ich hatte es
zuerst als normale "Private Sub CboBoxenFuellen()"
versucht, aber da geschah nichts.
Mir ist schon klar, dass beim Aufrufen der ersten Combobox
dann auch alle anderen gefüllt werden (bleiben so lange
leer, bis die erste angeklickt wurde). Aber könnte dieses
Füllen nicht komplett "ausgelagert" werden?
Auf jeden Fall schon einmal herzlichen Dank für die Hilfe!
cu
Götz
Götz Alles schrieb:
> in einer Userform sollen mehrere Combos mit ein und
> demselben Inhalt gefüllt werden. Die Namen der Combos
> unterscheiden sich lediglich in der fortlaufenden Nummer.
> Ich könnte jetzt für jede dieser Combos den Code kopieren
> und einfügen. Um ein Überborden des Codes zu vermeiden,
> würde ich dieses Befüllen aber gerne über eine Schleife
> machen.
ich würde die ComboBoxen im Initialize-Ereignis über die List-Eigenschaft füllen:
Private Sub UserForm_Initialize()
Dim intI As Integer
For intI = 1 To 9
Me.Controls("CboRating" & intI).List = Array( _
"Aaa/AAA", "Aa1/AA+", "Aa2/AA", "Aa3/AA-", "A2/A", "A3/A-", _
"Baa1/BBB+", "Baa2/BBB", "Baa3/BBB-", "Ba1/BB+", "Ba3/BB-", _
"B1/B+", "B2/B", "B3/B-")
Next intI
End Sub
--
Mit freundlichen Grüssen
Melanie Breden
- Microsoft MVP für Excel -
http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Götz Alles:
> ***
> Private Sub CboRating1_DropButtonClick()
>
> Dim Rating(1 To 15) As String
> Dim i As Variant
Dim i as long 'Typenstreng deklarieren!
>
> Rating(1) = "Aaa/AAA"
> Rating(2) = "Aa1/AA+"
> Rating(3) = "Aa2/AA"
> [snip]
>
> For i = 1 To 9
> Me.Controls("CboRating" & i).List = Rating()
> Next i
>
> End Sub
> ***
> Aber warum muß ich den Code unter "Private Sub
> CboRating1_DropButtonClick()" einbinden? Ich hatte es
> zuerst als normale "Private Sub CboBoxenFuellen()"
> versucht, aber da geschah nichts.
> Mir ist schon klar, dass beim Aufrufen der ersten Combobox
> dann auch alle anderen gefüllt werden (bleiben so lange
> leer, bis die erste angeklickt wurde). Aber könnte dieses
> Füllen nicht komplett "ausgelagert" werden?
Siehe Melanies Beispiel: Führe den Code in
UserForm_Initialize aus.
Was Du von dort aber *nicht* nachmachen solltest, ist das
= Array( ...)
in der Schleife. Dadurch wird dasselbe Array ganz
überflüssigerweise bei jedem Schleifendurchlauf neu
erzeugt. Das sollte in jedem Fall nur einmal vor der
Schleife passieren.
Ob Du das Array konservativ über Indizes erzeugst wie bei
mir oder über die Array-Funktion wie bei Melanie ist
im Grunde Geschmackssache; als Programmierer alter
Schule finde ich = Array allerdings furchtbar. ;-)
Gruß aus Mainz
Michael
>Siehe Melanies Beispiel: Führe den Code in
>UserForm_Initialize aus.
Yep, dann klappt es hervorragend.
>Was Du von dort aber *nicht* nachmachen solltest, ist das
>
>= Array( ...)
>
>in der Schleife. Dadurch wird dasselbe Array ganz
>überflüssigerweise bei jedem Schleifendurchlauf neu
>erzeugt. Das sollte in jedem Fall nur einmal vor der
>Schleife passieren.
>
>Ob Du das Array konservativ über Indizes erzeugst wie bei
>mir oder über die Array-Funktion wie bei Melanie ist
>im Grunde Geschmackssache; als Programmierer alter
>Schule finde ich = Array allerdings furchtbar. ;-)
Dann schaun wir mal .... ;-)
Vielen Dank auf jeden Fall noch einmal für Deine Hilfe.
cu
Götz
>ich würde die ComboBoxen im Initialize-Ereignis über die
>List-Eigenschaft füllen:
>
>Private Sub UserForm_Initialize()
> Dim intI As Integer
>
> For intI = 1 To 9
> Me.Controls("CboRating" & intI).List = Array( _
> "Aaa/AAA", "Aa1/AA+", "Aa2/AA", "Aa3/AA-
", "A2/A", "A3/A-", _
> "Baa1/BBB+", "Baa2/BBB", "Baa3/BBB-
", "Ba1/BB+", "Ba3/BB-", _
> "B1/B+", "B2/B", "B3/B-")
> Next intI
>End Sub
Vielen Dank, das hatte mir gefehlt.
cu
Götz