Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Mehrere (gleiche) ComoBoxen per VBA füllen

538 views
Skip to first unread message

Götz Alles

unread,
Jul 22, 2004, 9:29:56 AM7/22/04
to
Hallo zusammen,

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

Michael Zimmermann

unread,
Jul 22, 2004, 9:55:05 AM7/22/04
to
Hallo!

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

Götz Alles

unread,
Jul 22, 2004, 10:34:32 AM7/22/04
to
Hallo 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

Melanie Breden

unread,
Jul 22, 2004, 11:51:55 AM7/22/04
to
Hallo 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#


Michael Zimmermann

unread,
Jul 22, 2004, 4:41:13 PM7/22/04
to
Hallo!

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

Götz Alles

unread,
Jul 23, 2004, 3:14:05 AM7/23/04
to
Hallo 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

Götz Alles

unread,
Jul 23, 2004, 3:15:31 AM7/23/04
to
Hallo Melanie,

>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

0 new messages