Optionsfeld 2 Makros zuweisen
#1
Question 
hi, ich habe ein Optionsfeld. Wenn es angehakt ist, soll Makro 1 aktiviert werden. Wenn es nicht angehakt ist, Makro 2. Wie geht das?



Ich habe ein Makro aufgezeichnet und es steht unter Module1:
Code:
Sub N16OS()
'
' N16OS Makro
'

'
 If Shapes("Check Box 1").DrawingObject.Value = 1 Then
    Range("AN6:AN40").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("T42:AI45").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
    Range("T41").Select
    Selection.Font.Bold = True
    ActiveWindow.SmallScroll Down:=-15
    Else
    Range("AN6:AN40").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With
    Range("T42:AI45").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent4
        .TintAndShade = 0.399975585192419
        .PatternTintAndShade = 0
    End With
     Range("AJ4").Select
End Sub

Ich habe die beiden Makros durch Else getrennt. Und ein If Shapes("Check Box 1").DrawingObject.Value = 1 Then vorrangestellt. Doch es funktioniert nicht: "Fehler beim Compilieren. Sub oder Function nicht definiert."

Julia :)
Top
#2
Hallo Julia,
Sub Kontrollkaestchen1_Klicken()
 If ActiveSheet.CheckBoxes(Application.Caller).Value = 1 Then
   With Range("AN6:AN40,T42:AI45").Interior
       .Pattern = xlSolid
       .PatternColorIndex = xlAutomatic
       .Color = 65535
       .TintAndShade = 0
       .PatternTintAndShade = 0
   End With
   Range("T41").Font.Bold = True
 Else
   With Range("AN6:AN40,T42:AI45").Interior
       .Pattern = xlSolid
       .PatternColorIndex = xlAutomatic
       .ThemeColor = xlThemeColorAccent4
       .TintAndShade = 0.399975585192419
       .PatternTintAndShade = 0
   End With
   Range("T41").Font.Bold = False
 End If
End Sub
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • o0Julia0o
Top
#3
wow, das funktioniert! Ich habe Sub Kontrollkaestchen1_Klicken() durch Sub OS() ersetzt, weil ich mir den Namen besser zuordnen kann. Jetzt soll er noch zusätzlich folgendes machen:
Code:
With Range( _
        "AN6,AN8,AN10,AN12,AN14,AN16,AN18,AN20,AN22,AN24,AN26,AN28,AN30,AN32,AN34,AN36,AN38,AN40" _
        ).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark2
        .TintAndShade = -0.249977111117893
        .PatternTintAndShade = 0

So sieht das dann aus insgesamt:
Code:
Sub OS2()
If ActiveSheet.CheckBoxes(Application.Caller).Value = 1 Then
   With Range("AN6:AN40,T42:AI45").Interior
       .Pattern = xlSolid
       .PatternColorIndex = xlAutomatic
       .Color = 65535
       .TintAndShade = 0
       .PatternTintAndShade = 0
   End With
   Range("T41").Font.Bold = True
Else
   With Range("AN6:AN40,T42:AI45").Interior
       .Pattern = xlSolid
       .PatternColorIndex = xlAutomatic
       .ThemeColor = xlThemeColorAccent4
       .TintAndShade = 0.399975585192419
       .PatternTintAndShade = 0
   End With
With Range( _
        "AN6,AN8,AN10,AN12,AN14,AN16,AN18,AN20,AN22,AN24,AN26,AN28,AN30,AN32,AN34,AN36,AN38,AN40" _
        ).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark2
        .TintAndShade = -0.249977111117893
        .PatternTintAndShade = 0
     End With
   Range("T41").Font.Bold = False
End If
End Sub

Dann bekomme ich aber eine Fehlermeldung: "End If ohne If-Block."
Außerdem habe ich mir das Makro von Dir nochmal kopiert und unter deines direkt wieder eingefügt, um dort meine Änderung zu machen. Nur OS durch OS2 ersetzt. Wenn ich jetzt mein Makro verbinden möchte mit dem Optionsfeld kommt folgender Fehler: "Bezug muss ein Makroblatt betreffen.".
Top
#4
Hallo Julia,

ich habe Dir doch gezeigt, wie es ohne Select geht. ;-(
Sub OS_2()
   If ActiveSheet.CheckBoxes(Application.Caller).Value = 1 Then
       With Range("AN6:AN40,T42:AI45").Interior
          .Pattern = xlSolid
          .PatternColorIndex = xlAutomatic
          .Color = 65535
          .TintAndShade = 0
          .PatternTintAndShade = 0
       End With
       Range("T41").Font.Bold = True
   Else
       With Range("AN6:AN40,T42:AI45").Interior
          .Pattern = xlSolid
          .PatternColorIndex = xlAutomatic
          .ThemeColor = xlThemeColorAccent4
          .TintAndShade = 0.399975585192419
          .PatternTintAndShade = 0
       End With
       With Range("AN6,AN8,AN10,AN12,AN14,AN16,AN18,AN20,AN22,AN24,AN26,AN28,AN30,AN32,AN34,AN36,AN38,AN40").Interior
          .Pattern = xlSolid
          .PatternColorIndex = xlAutomatic
          .ThemeColor = xlThemeColorDark2
          .TintAndShade = -0.249977111117893
          .PatternTintAndShade = 0
       End With
       Range("T41").Font.Bold = False
   End If
End Sub
Das solltest Du mal in Ruhe durchgehen: Achtung Makrorekorder oder Wer selektiert denn da?


(30.01.2017, 02:29)o0Julia0o schrieb: Außerdem habe ich mir das Makro von Dir nochmal kopiert und unter deines direkt wieder eingefügt, um dort meine Änderung zu machen. Nur OS durch OS2 ersetzt. Wenn ich jetzt mein Makro verbinden möchte mit dem Optionsfeld kommt folgender Fehler: "Bezug muss ein Makroblatt betreffen.".

Guckst Du: Fehlerquellen (1) - Namen von Routinen (Makros)

Gruß Uwe
Top
#5
ach super, danke!
Top
#6
Vermeide überflüssigkeiten:


Code:
Sub OS_2()
   If ActiveSheet.CheckBoxes(Application.Caller).Value = 1 Then
       With Range("AN6:AN40,T42:AI45").Interior
          .Pattern = xlSolid    ' überflüssig
          .PatternColorIndex = xlAutomatic ' überflüssig
          .Color = 65535
          .TintAndShade = 0
          .PatternTintAndShade = 0  ' überflüssig
       End With
       Range("T41").Font.Bold = True
   Else
       With Range("AN6:AN40,T42:AI45").Interior
          .Pattern = xlSolid  ' überflüssig
          .PatternColorIndex = xlAutomatic ' überflüssig
          .ThemeColor = xlThemeColorAccent4
          .TintAndShade = 0.399975585192419
          .PatternTintAndShade = 0' überflüssig
       End With
       With Range("AN6,AN8,AN10,AN12,AN14,AN16,AN18,AN20,AN22,AN24,AN26,AN28,AN30,AN32,AN34,AN36,AN38,AN40").Interior
          .Pattern = xlSolid ' überflüssig
          .PatternColorIndex = xlAutomatic ' überflüssig
          .ThemeColor = xlThemeColorDark2
          .TintAndShade = -0.249977111117893
          .PatternTintAndShade = 0' überflüssig
       End With
       Range("T41").Font.Bold = False
   End If
End Sub

Dann reicht

Code:
Sub OS_2()
  Range("T41").Font.Bold = ActiveSheet.CheckBoxes(Application.Caller).Value = 1

   If ActiveSheet.CheckBoxes(Application.Caller).Value = 1 Then
       With Range("AN6:AN40,T42:AI45").Interior
          .Color = 65535
          .TintAndShade = 0
       End With
   Else
       With Range("AN6:AN40,T42:AI45").Interior
          .ThemeColor = xlThemeColorAccent4
          .TintAndShade = 0.399975585192419
       End With
       With Range("AN6,AN8,AN10,AN12,AN14,AN16,AN18,AN20,AN22,AN24,AN26,AN28,AN30,AN32,AN34,AN36,AN38,AN40").Interior
          .ThemeColor = xlThemeColorDark2
          .TintAndShade = -0.249977111117893
       End With
   End If
End Sub
Top
#7
o.k., danke für die Optimierung. Das kann man ja kaum alles wissen, warum jetzt PatternTintAndShade überflüssig, aber TintAndShade nicht überflüssig ist.
Top
#8
Hallo Julia,

(30.01.2017, 19:22)o0Julia0o schrieb: o.k., danke für die Optimierung. Das kann man ja kaum alles wissen, warum jetzt PatternTintAndShade überflüssig, aber TintAndShade nicht überflüssig ist.

da brauchst Du Dir jetzt keine Gedanken machen, dass/ob dies "überflüssig" ist, denn es schadet auch nicht. Im Gegensatz zum meist überflüssigen Select/Activate.
snb ist nicht gerade ein Vorbildprogrammierer, denn er hält bspw. auch Variablendeklarationen und "Option Explicit" für überflüssig. Thumps_down

Gruß Uwe
Top
#9
(30.01.2017, 22:37)Kuwer schrieb: snb ist nicht gerade ein Vorbildprogrammierer, denn er hält bspw. auch Variablendeklarationen und "Option Explicit" für überflüssig. Thumps_down

Andere Helfer bewerten ist, dem Forenreglen gemäß,


Zitat:Der Umgang miteinander

Respektiere Meinungen, auch wenn du sie nicht teilst. Jeder kann seine Ansicht kundtun, aber bitte in entsprechend friedlicher Art

überflüssig. Bitte verzichte darauf.
Top
#10
Wenn ich nun das Blatt schütze & das Makro ausführe erhalte ich einen Fehlermeldung(Laufzeitfehler 1004, anwendungs- oder objektdefinierter Fehler) & es wird nicht ausgeführt. Ich habe die Felder welche verändert werden vom Blattschutz ausgenommen. Über deren Feldeigenschaften das Häkchen weggenommen. Auch von den Steuerelementen, womit ich das Makro ausführe.
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste