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