586 Aufrufe
Gefragt in Tabellenkalkulation von Mitglied (481 Punkte)
Hallo,

gibt es eine Möglichkeit alle in einem Tabellenblatt vorhandenen Befehlsschaltflächen auszublenden bzw. dann auch wieder einzublenden.
Es geht um die Übersichtlichkeit.

Es gibt mehrere CommandButton & einen toggle button

Lasen sich Befehlsschaltflächen ohne großen Aufwand graphisch etwas aufhübschen?

13 Antworten

0 Punkte
Beantwortet von
Hallo Happy,

ja die gibt es. Mit dem folgenden Code kannst du den ToggleButton
dazu verwenden die anderen Buttons aus- oder einzublenden.
[code]Private Sub ToggleButton1_Click()

  For Each btn In ActiveSheet.Shapes
    If btn.Type = msoFormControl Then
      If btn.FormControlType = xlButtonControl Then 'für
Befehlsschaltflächen (Formular)
        btn.Visible = Not ToggleButton1.Value
      End If
    ElseIf btn.Type = msoOLEControlObject Then
      If btn.OLEFormat.ProgId Like "*CommandButton*" Then 'für
Active-X-Buttons
        btn.Visible = Not ToggleButton1.Value
      End If
    End If
  Next btn
  
End Sub[/code]Bei normalen Befehlsschaltflächen der msForms-
Auflistung sind die grafischen Möglichkeiten leider nur auf die Schrift  
beschränkt. Wenn du aber Active-X-Commandbuttons verwendest
kannst du in den Eigenschaften immerhin noch Hintergrundfarbe,
Schatten und ein Bild setzen. Evtl. in neueren Excel-Versionen sogar
noch etwas mehr.

Falls dir das noch nicht ausreicht, kannst du anstelle von Buttons
auch jede beliebige Autoform (Shape) verwenden. Egal welches
Zeichnungsobjekt du wählst - z.B. Rechteck, Oval, Dreieck, Bild etc. -
Du kannst diese meist frei stylen (z.B. Hintergrund mit Farbverlauf
oder 3D-Rand).

Und du kannst jeder Form ein Makro zuweisen, das bei Klick
gestartet wird. Falls du dich für diesen Weg entscheidest, melde
dich nochmal. Dann müssen wir den o.g. Code entsprechend
anpassen.

Gruß Mr. K.
0 Punkte
Beantwortet von
PS: Bitte ignorier die beiden falschen Zeilenumbrüche. Die
Befehlsschaltflächen (Formular) und die Active-X-Buttons gehören mit
zum Kommentar. und können auch gelöscht werden.
0 Punkte
Beantwortet von
So hier nochmal ordentlich

[code]Private Sub ToggleButton1_Click()

  For Each btn In ActiveSheet.Shapes
    If btn.Type = msoFormControl Then
      'für Befehlsschaltflächen (Formular)
      If btn.FormControlType = xlButtonControl Then
        btn.Visible = Not ToggleButton1.Value
      End If
    ElseIf btn.Type = msoOLEControlObject Then
      'für Active-X-Buttons
      If btn.OLEFormat.ProgId Like "*CommandButton*" Then
        btn.Visible = Not ToggleButton1.Value
      End If
    End If
  Next btn
  
End Sub[/code]Übrigens: Falls sich bei Klick auf den ToggleButton
nix tut musst du zuerst den Entwurfsmodus beenden. Das ist auf
der Entwickler-Registerkarte das Symbol mit dem Zeichendreieck.

Mr. K.
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo  xlKing,

erst mal danke für die Tipps und das Makro.

Habe einen ToggleButton_ausblenden_einblenden erstellt und die Befehlszeilen unter Code einkopiert.

Beim ausführen kommt zwar keine Fehlermeldung, die Schaltflächen sind aber nicht ausgeblendet. ):
0 Punkte
Beantwortet von
Hallo Happy,

hast du den Namen ToggleButton1 an den Namen deines Togglebuttons angepasst? Musst du an insgesamt 3 Stellen im Code machen. Wie dein neu angelegter ToggleButton heißt siehst du links neben der Formelleiste, sofer du ihn zuvor markiert hast.

Gruß Mr. K.
0 Punkte
Beantwortet von
Achso sorry,

du musst den Code natürlich in das Tabellenmodul (z.B. Tabelle1) kopieren, wo der ToggleButton und die Commandbuttonens liegen. Hab ich vergessen zu erwähnen.

Mr. K.
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo xlKing,

das Makro ist im Tabellenmodul der Tabelle5 :)

Habe den Namen angepasst - jetzt geht's - bis auf einen anderen ToggleButton (ToggleButton1).


Wie kann ich den ToggleButton1 aus- und einblenden?

PS
Der Name des Buttons lässt sich unter Eigenschaften zwar ändern, wird aber nicht gespeichert und bleibt daher immer ToggleButton2 ...
0 Punkte
Beantwortet von Mitglied (481 Punkte)
... & damit die Datei mit den ausgeblendeten Befehlsschaltflächen etwas besser aussieht, möchte ich noch zwei Zeilen verstecken.

Die Frage ist nur wie?

Rows("31:32").EntireRow.Hidden = True

Rows("31:32").EntireRow.Hidden = False
0 Punkte
Beantwortet von
Hallo Happy,

der Einfachheit halber kürze ich das Wort ToggleButton hier mal ab:

Ich war davon ausgegangen, dass du nur einen ToggleButton hast,
mit dem du die Commandbuttons ausblendest. Jeder Name kann
pro Blatt nur einmal verwendet werden. Du kannst also nicht TB2 in
TB1 umbenennen wenn es schon einen TB1 gibt. Du solltest ja
auch den Code an den Namen anpassen und nicht umgekehrt :-D

Wenn du nun also von TB2 startest und neben den
CommandButtons auch TB1 sowie die beiden Zeilen ausblenden
willst, brauchst du folgenden Code:

[code]Private Sub ToggleButton2_Click()
  
  Application.ScreenUpdating = False
  
  For Each btn In ActiveSheet.Shapes
    If btn.Type = msoFormControl Then
      'für Befehlsschaltflächen (Formular)
      If btn.FormControlType = xlButtonControl Then
        btn.Visible = Not ToggleButton2.Value
        Rows("31:32").EntireRow.Hidden = ToggleButton2.Value
      End If
    ElseIf btn.Type = msoOLEControlObject Then
      'für Active-X-Buttons
      If btn.OLEFormat.ProgId Like "*CommandButton*" _
      Or btn.OLEFormat.Object.Name = "ToggleButton1" Then
        btn.OLEFormat.Object.Visible = Not ToggleButton2.Value
        Rows("31:32").EntireRow.Hidden = ToggleButton2.Value
      End If
    End If
  Next btn
  
  Application.ScreenUpdating = True
  
End Sub[/code]

Gruß Mr. K.
0 Punkte
Beantwortet von Mitglied (481 Punkte)
Hallo  xlKing,

habe das Makro ausprobiert, die folgende Befehlszeile

Rows("31:32").EntireRow.Hidden = ToggleButton2.Value

verursacht einen Laufzeitfehler '1004'

??
...