Microsoft Excel

Herbers Excel/VBA-Archiv

Schaltflächen mit Bedingung ein- bzw. ausblenden | Herbers Excel-Forum


Betrifft: Schaltflächen mit Bedingung ein- bzw. ausblenden von: Ralf
Geschrieben am: 01.08.2012 08:22:40

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

  

Betrifft: AW: Schaltflächen mit Bedingung ein- bzw. ausblenden von: Thomas
Geschrieben am: 01.08.2012 09:00:11

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


  

Betrifft: AW: Schaltflächen mit Bedingung ein- bzw. ausblenden von: Beverly
Geschrieben am: 01.08.2012 09:56:40

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


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Schaltflächen mit Bedingung ein- bzw. ausblenden von: Ralf
Geschrieben am: 01.08.2012 10:25:28

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


  

Betrifft: AW: Schaltflächen mit Bedingung ein- bzw. ausblenden von: Beverly
Geschrieben am: 01.08.2012 11:19:15

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


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Schaltflächen mit Bedingung ein- bzw. ausblenden von: Ralf
Geschrieben am: 01.08.2012 12:15:31

Hallo Karin,

super Lösung.
Vielen Dank dafür.

Einen schönen sonnigen Tag noch.

Viele Grüße

Ralf


Beiträge aus den Excel-Beispielen zum Thema "Schaltflächen mit Bedingung ein- bzw. ausblenden"