HERBERS Excel-Forum - das Archiv
Checkboxen und Rahmen
Ingo

Hallo Forum
Vielleicht kann mir ja irgendjemand von euch helfen
-Ich habe eine UserForm mit 10 Checkboxen und 4 Rahmen
- ein Rahmen enthält 3 Checkboxen
- 1 Rahmen enthält nur eine Checkbox
Mein Problem ist folgenden:
-Wenn ich Checkbox1 im Rahmen1 auswähle, dann sollen die Rahmen 2-4 ausgeblendet werden – und es sollen die Checkboxen 2-3 nicht mehr angeklickt werden können
Das habe ich hinbekomme, aber sehr umständlich das Ganze, und vor allem werden die
Codes lang und viel
- das 2. Problem ist, es soll die Auswahl wieder aufgehoben werden können, deshalb die Checkboxen und keine Optionbutton
Kann mir jemand eine bessere Lösung sagen bzw. schreiben?
Danke
Ingo
Datei:
https://www.herber.de/bbs/user/101805.xlsm

AW: Checkboxen und Rahmen
Daniel

Hi
ja, geht elegeanter
probier mal folgenendes:
1. dieses Makro im Modul der Userform "Auswahl_2":
Sub Einaus()
Dim crtl As Control
Frame1.Visible = (Frame1.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
Frame2.Visible = (Frame2.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
Frame3.Visible = (Frame3.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
Frame4.Visible = (Frame4.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
For Each crtl In ActiveControl.Controls
crtl.Enabled = (crtl.Name = ActiveControl.ActiveControl.Name Or ActiveControl.ActiveControl. _
Value = False)
Next
End Sub
2. erstelle für jede Checkbox folgendes Click-Event:
Private Sub CheckBox1_Click()
Call Einaus
End Sub
zur Erläuterung des Codes:
in einer normalen Userform ist ActitveControl das Steuerelement, welches gerade den Focus hat, also bspw die zuletzt angeklickte Checkbox.
hast du jedoch Frames, so ist ActiveControl der Frame, in dem sich das zuletzt angeklickte Steuerelement befindet ActiveControl.ActiveControl ist dann das aktive Steuerelement innerhalb des Aktiven Frames.
Gruß Daniel

AW: Checkboxen und Rahmen
Daniel

Hier das Makro nochmal mit Variablen, ist vielleicht übersichtlicher:
Sub Einaus()
Dim crtl As Control, aFrm As Control, aChk As Control
Set aFrm = ActiveControl       'aktive Frame
Set aChk = aFrm.ActiveControl    'aktive Checkbox
Frame1.Visible = (Frame1.Name = aFrm.Name Or aChk.Value = False)
Frame2.Visible = (Frame2.Name = aFrm.Name Or aChk.Value = False)
Frame3.Visible = (Frame3.Name = aFrm.Name Or aChk.Value = False)
Frame4.Visible = (Frame4.Name = aFrm.Name Or aChk.Value = False)
For Each crtl In ActiveControl.Controls
crtl.Enabled = (crtl.Name = aChk.Name Or aChk.Value = False)
Next
End Sub
gruß Daniel

AW: Checkboxen und Rahmen
Ingo

Hey Daniel
ich bin ja so begeistert von deiner Lösung
danke
Ingo

Checkboxen und Rahmen
Ingo

Hallo Forum
Vielleicht kann mir ja irgendjemand von euch helfen
-Ich habe eine UserForm mit 10 Checkboxen und 4 Rahmen
- ein Rahmen enthält 3 Checkboxen
- 1 Rahmen enthält nur eine Checkbox
Mein Problem ist folgenden:
-Wenn ich Checkbox1 im Rahmen1 auswähle, dann sollen die Rahmen 2-4 ausgeblendet werden – und es sollen die Checkboxen 2-3 nicht mehr angeklickt werden können
Das habe ich hinbekomme, aber sehr umständlich das Ganze, und vor allem werden die
Codes lang und viel
- das 2. Problem ist, es soll die Auswahl wieder aufgehoben werden können, deshalb die Checkboxen und keine Optionbutton
Kann mir jemand eine bessere Lösung sagen bzw. schreiben?
Danke
Ingo
Datei:
https://www.herber.de/bbs/user/101805.xlsm

AW: Checkboxen und Rahmen
Daniel

Hi
ja, geht elegeanter
probier mal folgenendes:
1. dieses Makro im Modul der Userform "Auswahl_2":
Sub Einaus()
Dim crtl As Control
Frame1.Visible = (Frame1.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
Frame2.Visible = (Frame2.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
Frame3.Visible = (Frame3.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
Frame4.Visible = (Frame4.Name = ActiveControl.Name Or ActiveControl.ActiveControl.Value = False) _
For Each crtl In ActiveControl.Controls
crtl.Enabled = (crtl.Name = ActiveControl.ActiveControl.Name Or ActiveControl.ActiveControl. _
Value = False)
Next
End Sub
2. erstelle für jede Checkbox folgendes Click-Event:
Private Sub CheckBox1_Click()
Call Einaus
End Sub
zur Erläuterung des Codes:
in einer normalen Userform ist ActitveControl das Steuerelement, welches gerade den Focus hat, also bspw die zuletzt angeklickte Checkbox.
hast du jedoch Frames, so ist ActiveControl der Frame, in dem sich das zuletzt angeklickte Steuerelement befindet ActiveControl.ActiveControl ist dann das aktive Steuerelement innerhalb des Aktiven Frames.
Gruß Daniel

AW: Checkboxen und Rahmen
Daniel

Hier das Makro nochmal mit Variablen, ist vielleicht übersichtlicher:
Sub Einaus()
Dim crtl As Control, aFrm As Control, aChk As Control
Set aFrm = ActiveControl       'aktive Frame
Set aChk = aFrm.ActiveControl    'aktive Checkbox
Frame1.Visible = (Frame1.Name = aFrm.Name Or aChk.Value = False)
Frame2.Visible = (Frame2.Name = aFrm.Name Or aChk.Value = False)
Frame3.Visible = (Frame3.Name = aFrm.Name Or aChk.Value = False)
Frame4.Visible = (Frame4.Name = aFrm.Name Or aChk.Value = False)
For Each crtl In ActiveControl.Controls
crtl.Enabled = (crtl.Name = aChk.Name Or aChk.Value = False)
Next
End Sub
gruß Daniel

AW: Checkboxen und Rahmen
Ingo

Hey Daniel
ich bin ja so begeistert von deiner Lösung
danke
Ingo

Dialog-Beispiele
Bewerten Sie hier bitte das Excel-Portal