Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

VBA Rahmen um jeden Radiobutten in Userform

Forumthread: VBA Rahmen um jeden Radiobutten in Userform

VBA Rahmen um jeden Radiobutten in Userform
15.03.2025 11:52:54
Joschi Witchcraft
Hallo Forum.

Ich habe in einer Userform mehrere Option-Buttons. Wie kann ich um jeden Button einen Rahmen aktivieren?

Gruß Joschi
Anzeige

24
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Rahmen um jeden Radiobutten in Userform
15.03.2025 12:05:02
Ulf
Hi,
nimm ein Label, Borderstyle setzen + Nach hinten + fertig.
hth
Ulf
AW: VBA Rahmen um jeden Radiobutten in Userform
15.03.2025 14:10:13
Uduuh
Hallo,
quick and dirty:
Private Sub UserForm_Initialize()

Dim oCTL As msforms.OptionButton, oLBL As Object
On Error Resume Next
For Each oCTL In Controls
Set oLBL = Controls.Add("forms.label.1")
With oLBL
.Width = oCTL.Width
.Height = oCTL.Height
.Left = oCTL.Left
.Top = oCTL.Top
.Caption = ""
.BorderStyle = 1
.BackStyle = 0
.Enabled = 0
End With
Next
On Error GoTo 0
End Sub

Gruß aus'm Pott
Udo
Anzeige
AW: VBA Rahmen um jeden Radiobutten in Userform
15.03.2025 14:30:49
Daniel
Hi

Klicke im Editor einen Optionsbutton und schaue in der Eigenschaftsliste (wenn die nicht sichtbar ist, kannst du sie mit F4 oder das Menü - Ansicht einblenden), was du dort an nützlichen Eigenschaften findest.

Rahmenlinien steuert man über die Eigenschaft SpecialEffect (hier mal alle Möglichkeiten ausprobieren)
Oder über alle Eigenschaften, die den Text border in ihrem Namen enthalten (BorderColor, BorderStyle)

Wenn das nicht tut, dann hast du noch (wie bereits beschrieben) die Möglichkeit ein Label (einfaches Textfeld ohne Eingabemöglichkeit) zu erstellen, bei diesem die Rahmenlinien zu erstellen (gleiche Eigenschaften wie oben beschrieben) sowie die "Caption" zu leeren und den "BackStyle" auf transparent zu setzen.
Dann kannst du den Optionsbutton innerhalb des Labels platzieren.


Frames sind zwar auch Rahmenlinien, aber hier völlig ungeeignet, weil sie nicht nur Rahmenlinien sind, sondern noch weitere Funktionen haben. So sind Optionbuttons, die sich innerhalb eines Frames befinden, unabhängig von Optionbuttons außerhalb des Frames und bilden eine eigene Optionbuttengruppe.

Gruß Daniel
Anzeige
Wie die...
15.03.2025 15:42:59
Case
Moun Joschi, :-)

... Kollegen schon geschrieben haben - du muss da probieren. Auch die Eigenschaften der einzelnen Controls zeigen, was geht. ;-)

Ein Label ist hier wohl angezeigt, da du einen Frame schwerer handeln kannst. Das ist ein "Container", mit dem du mehr "anstellen" kannst - der aber auch schwerer per VBA zu packen ist. ;-)

Und auf das schon hingewiesene "ZOrder" - das ist wichtig, wenn du Controls hinzufügst und "übereinanderlegst". ;-)
https://learn.microsoft.com/de-de/office/vba/Language/Reference/user-interface-help/zorder-method

Hier noch eine Beispieldatei, wo du es siehst: ;-)
https://www.herber.de/bbs/user/176274.xlsb


  • Klicke den CommandButton MIT ZOrder.

  • Dann kannst du die OptionButton klicken.

  • Lösche die Labels (mit dem CommandButton).

  • Klicke den CommandButton OHNE ZOrder.

  • Und nun...


  • Das ist jetzt einfach was zum "spielen" - also ohne Gruppierungen der OptionButton usw.. ;-)

    Servus
    Case
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 15:55:20
    Alwin Weisangler
    Hallo Joschi,

    so was nachträglich dynamisch zu erzeugen geht mit Label.
    Wenn es unbedingt ein Frame sein soll, musst du den jeweiligen OptionButton ins Frame setzen.
    Da aber schon vermutlich die Optionbuttons hardcodiert vorhanden sind bleibt nur dies mit einem Label zu erschlagen.
    beispielhaft so:
    
    
    Private Sub UserForm_Initialize()
    FrameUmOB
    End Sub

    Sub FrameUmOB()
    Dim i&, objFrame As Control, arrOpt(): arrOpt = Array(OptionButton1, OptionButton2, OptionButton3)
    For i = LBound(arrOpt) To UBound(arrOpt)
    Set objFrame = Controls.Add("Forms.Label.1", "Rahmen" & i + 1, True)
    With objFrame
    .Left = arrOpt(i).Left - 2
    .Width = arrOpt(i).Width + 2
    .Top = arrOpt(i).Top
    .Height = arrOpt(i).Height
    .BackStyle = 0
    .BorderStyle = 1
    .ZOrder 0
    End With
    Next
    End Sub

    Ins arrOpt trägst du alle deine Optionbuttons ein, welche einen Rahmen erhalten sollen. Der Rest ist eigentlich selbsterklärend.

    Gruß Uwe
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 15:57:21
    Alwin Weisangler
    ändere .ZOrder 1
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 16:12:10
    Joschi Witchcraft
    Hallo.

    Ich möchte mich bei allen bedanken, welche mir geantwortet haben.

    Ich habe mich für den Vorschlag von Uduuh entschieden. Mein Problem ist dadurch gelöst. Und ich habe den Code auch verstanden und nicht nur kopiert.

    Gruß Joschi
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 16:20:59
    Daniel
    Hast du auch mal die Eigenschaften der Optionbuttons selbst ausprobiert oder war dir das zuviel Eigeninitiative?
    Anzeige
    OptionButtons haben keinen BorderStyle. owT
    15.03.2025 16:24:09
    Uduuh
    AW: OptionButtons haben keinen BorderStyle. owT
    15.03.2025 16:36:30
    Joschi Witchcraft
    Hallo Daniel.

    Bevor ich meine Frage im Forum gestellt hatte, habe ich sowohl in den Eigenschaften eines OptionsButtons als auch im Internet gesucht.

    Vor einigen Tagen hatte ich bei meiner Internetsuche ein Beispiel gefunden, um Options-Buttons auf dem Arbeitsblatt anzuzeigen. Das Beispiel hatte um jeden Buttun einen Rahmen. Allerdings war die Lösung über das Arbeitsblatt für mich nicht brauchbar. Deshalb musste ich auf eine Userform ausweichen. Und dort hat mir der Rahmen gefehlt. Deshalb das Forum.
    Anzeige
    AW: OptionButtons haben keinen BorderStyle. owT
    15.03.2025 19:54:22
    Daniel
    ja hast recht.
    die Optionbuttons sind tatsächlich etwas spärlich ausgestattet, was das Design angeht.
    Gruß Daniel
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 16:22:41
    Uduuh
    Hallo,
    verbessert:
    Private Sub UserForm_Initialize()
    
    Dim objCONTROL As Control, objLABEL As Control

    Const RandOben = 1
    Const RandUnten = 1
    Const RandLinks = 2
    Const RandRechts = 2

    For Each objCONTROL In Controls
    If TypeName(objCONTROL) = "OptionButton" Then
    Set objLABEL = Controls.Add("forms.label.1")
    With objLABEL
    .Width = objCONTROL.Width + RandLinks + RandRechts
    .Height = objCONTROL.Height + RandOben + RandUnten
    .Left = objCONTROL.Left - RandLinks
    .Top = objCONTROL.Top - RandOben
    .BorderStyle = fmBorderStyleSingle
    .ZOrder (fmZOrderBack)
    End With
    End If
    Next

    End Sub

    NIcht mehr dirty. ;-)

    Gruß aus'm Pott
    Udo
    Anzeige
    AW: Bin nicht der Frager, aber ...
    15.03.2025 16:44:32
    Dieter(Drummer)
    Hallo Udo,

    ... ich finde deinen Lösung einfach prima.
    Danke, auch wenn ich nicht der Fragende bin.

    Gruß,
    Dieter(Drummer)
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 17:00:50
    Dieter(Drummer)
    Hallo Udo,

    könntest du deinen Code so ändern, dass er nicht über "Unserform_Initaialize" ausgeführt wird, sonder per Klick auf einem CommandButton auf der Userform?
    Wäre toll. wenn das möglich wäre.

    Gruß,
    Dieter(Drummer
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 17:42:15
    Joschi Witchcraft
    Hallo Udo.

    Jetzt hätte ich doch noch eine Frage zu Deinem Code:

    Um flexibler zu sein, füge ich einer leeren Userform meine Buttons zu:

    Set NewOptionButton = Userform1.Controls.Add("Forms.OptionButton.1")

    Dadurch wird jedoch bereits die Routine UserForm_Initialize() aufgerufen. Doch zu diesem Zeitpunkt gibt es noch keine OptionButton.

    Wie könnte ich das Problem lösen?

    Deinen Code hatte ich zuvor mit einer Userform getestet, in welcher bereits OptionButton definiert waren. Das hat auch funktioniert.
    Den Code habe ich in ein Standardmodul kopiert und vor dem "Show" aufgerufen. Excel "meckert" an der Zeile
    For Each objCONTROL In Controls
    am Begriff "Controls"

    Gruß Joschi
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 17:48:19
    Onur
    Wenn du nur CELLS schreibst, geht VBA davon aus, dass du das aktive Blatt bzw das Blatt, wo der Code drin steht, meinst, da du nicht genau referenziert - z.B. Tabelle1.Cells(x,y) - hast.
    Das selbe bei CONTROLS - da der Code im allg. Modul steht, musst du schon die Userform mit angeben - also "UserFormXY.Controls"
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 18:23:06
    Uduuh
    Hallo,
    dann muss du das
        Set oLBL = Controls.Add("forms.label.1")
    
    With oLBL
    .Width = oCTL.Width
    .Height = oCTL.Height
    .Left = oCTL.Left
    .Top = oCTL.Top
    .Caption = ""
    .BorderStyle = 1
    .BackStyle = 0
    .Enabled = 0
    End With

    in deinen Code integrieren. Nur mit NewOptionButton statt oCTL.

    Gruß aus'm Pott
    Udo
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 17:03:08
    Onur
    Das kriegst du nicht alleine hin?
    Wo ist das Problem, den Code ohne "Sub ... " und "End Sub" zu kopieren und woanders einzufügen ?
    AW: Danke für Hinweis, Onur...
    15.03.2025 17:11:58
    Dieter(Drummer)
    Hallo Onur,

    ... das es so einfach ist, daruf wäre ich jetzt nicht gekommen. Danke für den Hinweis und es funktioniert perfekt.

    Gruß,
    Dieter(Drummer)
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 13:12:56
    Joschi Witchcraft
    Hallo Ulf.

    Danke für Deine Antwort. Mit meinem Basis-Wissen und Deiner Antwort komme ich leider nicht weiter. Auch nicht mit Hilfe von Google.

    Gruß Joschi
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 13:45:22
    Onur
    Dann musst du halt üben.
    Nimm eine leere Userform, setze darauf einen Rahmen und da hinein ein Button.
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 14:22:13
    Ulf
    Hi,
    Hier der Rumpf einer Routine bei Userform mit 1 unbenannten OptionButton
    
    
    Option Explicit

    Private Type Rechteck
    Left As Long
    Top As Long
    Width As Long
    Height As Long
    End Type

    'Leere Form mit 1 OptionButton
    'Mit For Next und Ubound Dimension bestimmen
    Dim rc() As Rechteck

    Private Sub UserForm_Initialize()
    Dim lb As MSForms.Label
    Dim ctr As MSForms.Control
    Dim obt As MSForms.OptionButton
    Dim lngRand As Long
    ReDim rc(0)
    lngRand = 5
    Set obt = Me.OptionButton1
    With obt
    rc(0).Left = .Left
    rc(0).Top = .Top
    rc(0).Width = .Width
    rc(0).Height = .Height
    End With
    Set lb = Me.Controls.Add("Forms.Label.1", "lbl1", False)
    With lb
    .AutoSize = False
    .BorderStyle = fmBorderStyleSingle
    End With
    Set ctr = lb
    With ctr
    .Left = rc(0).Left - lngRand
    .Top = rc(0).Top - lngRand
    .Width = rc(0).Width + 2 * lngRand
    .Height = rc(0).Height + 2 * lngRand
    .ZOrder 1
    .Visible = True
    End With
    End Sub

    hth
    Ulf
    Anzeige
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 13:56:30
    Joschi Witchcraft
    Hallo Onur.

    Soll ich jetzt meine bestehende Userform vergessen, und dann für jeden geplanten Button einen eigenen Rahmen (Frame) definieren.

    NEIN DANKE!

    Üben ist gut. Aber mit Basis-Wissen fehlt irgend etwas, um zu üben.

    Gruß Joschi
    AW: VBA Rahmen um jeden Radiobutten in Userform
    15.03.2025 14:06:06
    Onur
    Tja, wenn du zu bequem bist zum Üben, wird sich das mit dem Basis-Wissen auch nie ändern. Dann wirst du auch nie erfahren, wie man z.B. Buttons oder Labels in den Vorder- bzw Hintergrund schickt...
    Glaubst du, dass all die Anderen, die das schon können, einfach eine Pille geschluckt haben und schon konnten sie es?
    Anzeige

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige