ForeColor der Optionbuttons einer Gruppe ändern

Hallo, mit dem Code

Private Sub opt1_Click()
opt1.ForeColor = vbRed
Dim ctl As Control
For Each ctl In Me.Controls
If TypeOf ctl Is OptionButton Then
If ctl.Caption „opt1“ Then
ctl.ForeColor = vbBlack
End If
End If
Next ctl
End Sub

wird die ForeColor von opt1 auf rot und die ForeColor aller anderen OptionButtons der Userform auf schwarz gesetzt. Die Schleife soll aber nur die ForeColor des OptionButtons opt1 innerhalb eines Rahmens (fra1) bzw eines GroupeNames (Gruppe1) auf rot und alle anderen i n n e r h a l b eines Rahmens bzw eines GroupeNames auf schwarz setzen. Wie kann das in den Code eingebaut werden?

Gruß Wilhelm

Hallo Wilhelm,

Private Sub opt1_Click()
opt1.ForeColor = vbRed
Dim ctl As Control
For Each ctl In Me.Controls
If TypeOf ctl Is OptionButton Then
If ctl.Caption „opt1“ Then
ctl.ForeColor = vbBlack
End If
End If
Next ctl
End Sub

wird die ForeColor von opt1 auf rot und die ForeColor aller
anderen OptionButtons der Userform auf schwarz gesetzt. Die
Schleife soll aber nur die ForeColor des OptionButtons opt1
innerhalb eines Rahmens (fra1) bzw eines GroupeNames (Gruppe1)
auf rot und alle anderen i n n e r h a l b eines Rahmens bzw
eines GroupeNames auf schwarz setzen. Wie kann das in den Code
eingebaut werden?

Normalerweise fügst Du Optionbuttons als Feld ein, d.h. einen Button einfügen, diesen dann kopieren und mittels Strg+V wieder einfügen. Auf die Frage „Wollen Sie ein Steuerelementfeld erstellen“ mit „JA! Ich will“ antworten bzw. den entspr. Button des Dialogfeldes wählen.

Das Option_Click-Ereignis ändert sich dann zu Option_Click(Index) und gibt Dir die Nummer des geklickten Buttons zurück. So kannst Du mittels

Private Sub Option1_Click(Index As Integer)
Option1(Index).ForeColor = vbRed
For i = 0 To Option1.Count - 1
If i Index Then Option1(i).ForeColor = vbBlack
Next
End Sub

die Buttons eines Feldes (und nur dieses Feldes) bequem einfärben.

BTW: Auf diese Weise brauchst Du die Buttons auch nicht in Frames oder dergl. kapseln, weil sie eine eigenständige Einheit bilden.

Viele Grüße
Sculpture

Hallo Sculpture,

Normalerweise fügst Du Optionbuttons als Feld ein, d.h. einen
Button einfügen, diesen dann kopieren und mittels Strg+V
wieder einfügen. Auf die Frage „Wollen Sie ein
Steuerelementfeld erstellen“ mit „JA! Ich will“ antworten bzw.
den entspr. Button des Dialogfeldes wählen.

hört sich gut an, funktioniert bei mir aber - noch - nicht:

Wenn ich in der Werkzeugliste das Option-Button-Symbol klicke und auf die Dialogbox übertrage, dann mit STRG C und STRG V ein/en? weiter/es/en Option-Button erzeuge, fragt mich gar niemand nach „Wollen Sie ein Steuerelementfeld erstellen?“, sondern der zweite Button ist einfach da.:frowning:(
Für mich ist der Begriff „Steuerelemntfeld“ völlig neu; kannst Du mir hier noch eine näherere Erläuterung geben? Bei mir läuft VBA Version 87 - 96. Kann das damit zusammenhängen?

Danke und Gruß
Wihelm

Hallo Wilhelm,

offenbar programmierst Du in VBA, nicht in VB. Hier scheint die Steuerelementfeld-Variante nicht zu funktionieren. Ich schlage Dir folgendes vor: Anstelle des Steuerelementfelds gibt es in VBA für jeden OptionButton die Eigenschaft „GroupName“, womit Du die Buttons zu einzelnen Gruppen zusammenfassen kannst.

Angenommen, Du definierst für OptionButton1 und 2 den Groupname „a“, für OptionButton3-4 „b“. Dann kannst Du mit folgendem Code das von Dir Gewünschte erreichen:

Private Sub OptionButton1_Click()
ColorGroup „a“, 1
End Sub

Private Sub OptionButton2_Click()
ColorGroup „a“, 2
End Sub

Private Sub OptionButton3_Click()
ColorGroup „b“, 3
End Sub

Private Sub OptionButton4_Click()
ColorGroup „b“, 4
End Sub

Private Sub OptionButton5_Click()
ColorGroup „b“, 5
End Sub

Sub ColorGroup(GroupName, ButtonNumber)
Dim ctl As Control
For Each ctl In UserForm1.Controls
If Left(ctl.Name, 3) = „Opt“ Then
If ctl.GroupName = GroupName Then
If ctl.Name „OptionButton“ & ButtonNumber Then
ctl.ForeColor = 0
Else
ctl.ForeColor = vbRed
End If
End If
End If
Next
End Sub

Schaut vielleicht etwas kompliziert aus, aber etwas Besseres ist mir leider nicht eingefallen. Den Namen und die Gruppenzuordnung der Buttons musst Du halt entsprechend anpassen.

Wenn Du noch Fragen hast, melde Dich.

Gruß
Sculpture

Hallo Sculpture,
herzlichen Dank für die Mühe, die Du Dir mit mir gegeben hast! Deine Lösung ist für mich in der Tat kompliziert, aber durch solche Hilfen lernt man besonders viel und wird für Problemlösungen sensibilisiert.

CU
Wilhelm