Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Schaltflächen mit Bedingung ein- bzw. ausblenden

Schaltflächen mit Bedingung ein- bzw. ausblenden
Ralf
Hallo Forum,
ich möchte Schaltflächen mit Bedingungen ein- bzw. ausblenden.
Im konkreten Fall folgendes:
1. Wenn Zelle A8 nicht befüllt ist, soll der Button "einschalten" angezeigt werden und der Button "ausschalten" nicht sichtbar sein.
2. Wenn Zelle A8 mit "Hallo!" befüllt ist, soll der Button "ausschalten" angezeigt werden und der Button "einschalten" nicht sichtbar sein.
Ich habe mal eine Beispielmappe vorbereitet:
https://www.herber.de/bbs/user/81232.xlsm
Kann mir bitte jemand helfen?
Vielen Dank im Voraus für eine Rückmeldung.
Viele Grüße
Ralf
Anzeige
AW: Schaltflächen mit Bedingung ein- bzw. ausblenden
01.08.2012 09:00:11
Thomas
Hallo Ralf,
mit einer Schaltfläche geht das meiner Meinung nach nicht, jedoch mit dem Command Button.
Siehe Datei.
Freundlicher Gruß
Thomas
https://www.herber.de/bbs/user/81233.xlsm
AW: Schaltflächen mit Bedingung ein- bzw. ausblenden
01.08.2012 09:56:40
Beverly
Hi Ralph,
weise beiden Schaltern dieses Makro (im allgemeinen Modul) zu:
Sub EinAus()
With ActiveSheet.Shapes(ActiveSheet.Application.Caller)
If .DrawingObject.Caption = "einschalten" Then
Makro1
.Visible = False
ActiveSheet.Shapes("Schaltfläche 2").Visible = True
Else
Makro2
.Visible = False
ActiveSheet.Shapes("Schaltfläche 1").Visible = True
End If
End With
End Sub

Durch die Verwendung von Application.Caller kann man beiden Steuerelementen das selbe Makro zuweisen und innderhalb des Makros dann verzweigen, je nachdem welcher Schalter gedrückt wurde.
Du kannst natürlich auch anstelle des Aufrufs von Makro1 bzw. Makro2 den Code aus beiden Markos direkt dort eintragen.
Außerdem - man kann in VBA zu 99% auf Select und Activate verzichten. In diesm Fall könnten die Codes der beiden Markos so aussehen:
Sub Makro1()
With Range("A8:B10")
With .Font
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.Name = "Arial"
.FontStyle = "Standard"
.Size = 26
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ThemeColor = xlThemeColorLight2
.TintAndShade = 0.399975585192419
.ThemeFont = xlThemeFontNone
End With
With .Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = True
.Value = "Hallo!"
End With
End Sub
Sub Makro2()
With Range("A8:B10")
With .Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
.ClearContents
End With
End Sub

Da du den Bereich der verknüpften Zellen bereits formatiert hast, muss die Formatierung nicht jedes Mal wieder ausgeführt weden, da du mit .ClearContents nur den Inhalt der Zelle und nicht die Formatierung löschst. Deshalb kannst du die beiden Makros außerdem auf einige wenige Zeilen zusammenstreichen:
Sub Makro1()
With Range("A8:B10")
.Interior.Color = 65535
.Value = "Hallo!"
End With
End Sub
Sub Makro2()
With Range("A8:B10")
.Interior.Pattern = xlNone
.ClearContents
End With
End Sub



Anzeige
AW: Schaltflächen mit Bedingung ein- bzw. ausblenden
01.08.2012 10:25:28
Ralf
Hallo Karin,
Hallo Thomas,
vielen Dank für Euren Beitrag.
Karins Lösung ist natürlich der Hit, vor allem, weil der Code nun übersichtlicher und kürzer ist. Ich habe den Code aufgezeichnet, daher war er so lang.
Jetzt habe ich noch eine andere Frage zu den Schaltflächen: Ich muss die Schaltflächen in meiner Originaldatei ja nun eindeutig nummerieren. Komischerweise kann ich verschiedene Schaltflächen nicht umbenennen und so bleibt eine doppelete Bezeichnung stehen, was bei Ausführung des Codes natürlich zu Problemen führt.
Woran kann das liegen?
Viele Grüße
Ralf
Anzeige
AW: Schaltflächen mit Bedingung ein- bzw. ausblenden
01.08.2012 11:19:15
Beverly
Hi Ralf,
wie meinst du das, du kannst die Schaltflächen nicht umbenennen? Das geht doch bei markierter Schaltfläche im Namensfenster. Wenn du allerdings "Schaltfläche 2" in "Schaltfläche 1" umbenennen willst und es gibt bereits eine "Schaltfläche 1", dann ist das ein Problem. Der einfachste Weg: wähle eine Bezeichnung (z.B. A, B, C oder sonstwie), die noch keine deiner vorhandenen Schaltflächen trägt.
Du kannst allerdings auch einen völlig anderen Weg wählen und nur 1 Schaltfläche für beides verwenden und jeweils nur die Beschriftung ändern. Das kannst du mit dem folgenden Code lösen:
Sub EinAus()
With ActiveSheet.Shapes(ActiveSheet.Application.Caller)
If .DrawingObject.Caption = "einschalten" Then
Makro1
.DrawingObject.Caption = "ausschalten"
Else
Makro2
.DrawingObject.Caption = "einschalten"
End If
End With
End Sub



Anzeige
AW: Schaltflächen mit Bedingung ein- bzw. ausblenden
01.08.2012 12:15:31
Ralf
Hallo Karin,
super Lösung.
Vielen Dank dafür.
Einen schönen sonnigen Tag noch.
Viele Grüße
Ralf
;
Anzeige
Anzeige

Infobox / Tutorial

Schaltflächen in Excel mit VBA bedingt ein- und ausblenden


Schritt-für-Schritt-Anleitung

  1. Öffne Deine Excel-Datei und aktiviere das VBA-Editor-Fenster mit ALT + F11.

  2. Füge ein Modul hinzu: Gehe zu Einfügen -> Modul.

  3. Kopiere den folgenden VBA-Code in das Modul:

    Sub EinAus()
        With ActiveSheet.Shapes(ActiveSheet.Application.Caller)
            If .DrawingObject.Caption = "einschalten" Then
                Makro1
                .Visible = False
                ActiveSheet.Shapes("Schaltfläche 2").Visible = True
            Else
                Makro2
                .Visible = False
                ActiveSheet.Shapes("Schaltfläche 1").Visible = True
            End If
        End With
    End Sub
  4. Erstelle die beiden Makros Makro1 und Makro2:

    Sub Makro1()
        With Range("A8:B10")
            .Interior.Color = 65535
            .Value = "Hallo!"
        End With
    End Sub
    
    Sub Makro2()
        With Range("A8:B10")
            .Interior.Pattern = xlNone
            .ClearContents
        End With
    End Sub
  5. Verknüpfe die Schaltflächen in Deiner Excel-Tabelle mit dem EinAus-Makro. Klicke mit der rechten Maustaste auf die Schaltfläche, gehe zu Makro zuweisen und wähle EinAus.


Häufige Fehler und Lösungen

  • Schaltflächen können nicht umbenannt werden: Achte darauf, dass keine zwei Schaltflächen denselben Namen haben. Nutze eindeutige Bezeichnungen wie "Button1", "Button2".

  • Schaltflächen werden nicht angezeigt: Stelle sicher, dass die Sichtbarkeit der Schaltflächen in Deinem Code korrekt gesetzt ist.


Alternative Methoden

Eine alternative Methode, um die Sichtbarkeit von Schaltflächen zu steuern, ist die Verwendung von nur einer Schaltfläche, deren Beschriftung geändert wird. Du kannst den folgenden Code verwenden:

Sub EinAus()
    With ActiveSheet.Shapes(ActiveSheet.Application.Caller)
        If .DrawingObject.Caption = "einschalten" Then
            Makro1
            .DrawingObject.Caption = "ausschalten"
        Else
            Makro2
            .DrawingObject.Caption = "einschalten"
        End If
    End With
End Sub

Diese Methode reduziert die Anzahl der benötigten Schaltflächen und vereinfacht die Verwaltung.


Praktische Beispiele

Angenommen, Du möchtest eine Excel-Tabelle erstellen, in der der Button "einschalten" die Zelle A8 mit "Hallo!" befüllt und die Schaltfläche "ausschalten" sichtbar macht. Dies kannst Du mit dem obigen Code und den zugehörigen Makros erreichen.


Tipps für Profis

  • Vermeide die Verwendung von .Select und .Activate: Dies verbessert die Effizienz Deines Codes. Der oben genannte Code zeigt, wie man direkt auf Objekte zugreift.

  • Nutze benutzerdefinierte Namen: Bei der Arbeit mit Excel Schaltflächen ist es ratsam, benutzerdefinierte Namen für Schaltflächen zu vergeben, um Verwirrung zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich Schaltflächen ein- und ausblenden?
Du kannst den oben genannten VBA-Code verwenden, um die Sichtbarkeit von Schaltflächen in Abhängigkeit von Zellinhalten zu steuern.

2. Was kann ich tun, wenn meine Schaltflächen nicht funktionieren?
Überprüfe die Zuordnungen der Makros sowie die Sichtbarkeitseinstellungen der Schaltflächen. Stelle sicher, dass der Code keine Fehler enthält.

3. Kann ich mehrere Schaltflächen gleichzeitig steuern?
Ja, Du kannst das gleiche Prinzip auf mehrere Schaltflächen anwenden, indem Du den Code entsprechend anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige