Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema CommandButton
BildScreenshot zu CommandButton CommandButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema OptionButton
BildScreenshot zu OptionButton OptionButton-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Makros ausführen bei zwei aktivierten Checkboxen

Betrifft: Makros ausführen bei zwei aktivierten Checkboxen von: GefährlichesHalbwissen
Geschrieben am: 04.11.2014 10:49:56

Hallo liebe Excel-Experten,

seit langer Zeit bin ich bereits großer Fan dieser Plattform - hat sie mir doch regelmäßig bei meinen Excel- und VBA-Problemen weitergeholfen. Auch jetzt bin ich wieder mit meinem Latein am Ende, habe aber hier aber dieses Mal leider keine Lösungen gefunden.

Ich habe in Excel2010 ein UserForm (UserForm.1) erstellt, auf dem u.a. vier Checkboxen (Kontrollkästchen) hinterlegt sind. Jede Checkbox ist bereits mit einem funktionierenden Makro hinterlegt, dass bei Auswahl der Box eine Spalte einblendet bzw. ausblendet:

Private Sub CheckBox1_Click()
If CheckBox1.Value = True Then
Columns("D:D").EntireColumn.Hidden = False
Else
Columns("D:D").EntireColumn.Hidden = True
End If
End Sub

Die Makros funktionieren über das UserForm auch einwandfrei. Die anderen Makros sind dementprechend für die CheckBox2-4 hinterlegt und beziehen sich auf die Spalten E bis G auf Tabellenblatt "Tabelle1". Bei maximaler Auswahl aller vier Kontrollkästchen werden also vier Spalten eingeblendet, wenn keine Box angeklickt wird werden alle vier Spalten ausgeblendet.

Nun möchte ich gerne eine weitere Funktion hinzufügen, dass bei der Auswahl von zwei der vier Kontrollkästchen automatisch in der Spalte H auf "Tabelle1" die Differenz der jeweiligen Zellenwerte (bspw. bei der Wahl von Checkbox 1 und 2 werden die Spalten D und E verglichen) angezeigt werden. Die Auswahl der beiden CheckBoxen soll variabel erfolgen; also auch ein Vergleich zwischen Checkbox 1 mit 3; 2 mit 4; 3 mit 4; usw.. Sobald eine dritte und vierte CheckBox angeklickt wird, soll hingegen keine Differenz angezeigt werden.

Ich hoffe, dass meine Erklärung soweit verständlich war. Ansonsten bin ich natürlich gerne für weitere Angaben verfügbar. Schon einmal vielen Dank und euch einen schönen Tag :)

  

Betrifft: AW: Makros ausführen bei zwei aktivierten Checkboxen von: Rudi Maintaire
Geschrieben am: 04.11.2014 11:41:08

Hallo,
teste mal.

Private Sub CheckBox1_Click()
  Columns("D:D").EntireColumn.Hidden = Not CheckBox1
  CheckCbx
End Sub

Private Sub CheckBox2_Click()
  Columns("E:E").EntireColumn.Hidden = Not CheckBox2
  CheckCbx
End Sub

Private Sub CheckBox3_Click()
  Columns("F:F").EntireColumn.Hidden = Not CheckBox3
  CheckCbx
End Sub

Private Sub CheckBox4_Click()
  Columns("G:G").EntireColumn.Hidden = Not CheckBox4
  CheckCbx
End Sub

Sub CheckCbx()
  Dim i As Integer, bytCbx As Byte
  bytCbx = 0
  For i = 1 To 4
  bytCbx = bytCbx Or Controls("Checkbox" & i) * -2 ^ (i - 1)
  Next
  Select Case bytCbx
    Case 3, 5, 9, 6, 10, 12
      Differenz bytCbx
  End Select
End Sub

Sub Differenz(bytCbx)
  Dim lRow As Long
  lRow = Cells(Rows.Count, 1).End(xlUp).Row - 1
  Select Case bytCbx
    Case 3
      Cells(2, 8).Resize(lRow).FormulaR1C1 = _
        "=RC4-RC5"  'D-E
    Case 5
      Cells(2, 8).Resize(lRow).FormulaR1C1 = _
        "=RC4-RC6"  'D-F
    Case 9
      Cells(2, 8).Resize(lRow).FormulaR1C1 = _
        "=RC4-RC7"  'D-G
    Case 6
      Cells(2, 8).Resize(lRow).FormulaR1C1 = _
        "=RC5-RC6"  'E-F
    Case 10
      Cells(2, 8).Resize(lRow).FormulaR1C1 = _
        "=RC5-RC7"  'E-G
    Case 12
      Cells(2, 8).Resize(lRow).FormulaR1C1 = _
        "=RC6-RC7"  'F-G
  End Select
End Sub
Gruß
Rudi


  

Betrifft: AW: Makros ausführen bei zwei Checkboxen von: GefährlichesHalbwissen
Geschrieben am: 04.11.2014 12:12:32

Erst einmal vielen Dank für deine schnelle Hilfe.

Ich habe deinen Quellcode gleich mal in mein UserForm eingebaut. Deine Befehle zum ein- und ausblenden funktioneren tadellos. Auch mit dem Makro "CheckCbx" gibt es keine Schwierigkeiten. Allerdings kommt sofort die Fehlermeldung "" wenn ich zwei oder mehr Checkboxen im Formular anklicke. Der Report verweisst mich dann auf das Makro "Differenz".

Ich habe anfangs wohl vergessen zu erwähnen, dass die Daten für die vier einzublendenden Spalten über zwei Dropdownlisten gezogen werden. Das UserForm startet letztendlich erst, wenn ein entsprechender Startbutton gedrückt wird.

Kommt es deswegen zu Komplikationen mit deinen Makros? Ich habe den Quellcode meines UserForms daher einfach mal komplett hier reinkopiert. Nochmals vielen vielen Dank für deine Hilfe :)

Option Explicit

Private Sub CheckBox1_Click()
  Columns("D:D").EntireColumn.Hidden = Not CheckBox1
  CheckCbx
End Sub

Private Sub CheckBox2_Click()
  Columns("E:E").EntireColumn.Hidden = Not CheckBox2
  CheckCbx
End Sub

Private Sub CheckBox3_Click()
  Columns("F:F").EntireColumn.Hidden = Not CheckBox3
  CheckCbx
End Sub

Private Sub CheckBox4_Click()
  Columns("G:G").EntireColumn.Hidden = Not CheckBox4
  CheckCbx
End Sub
Sub CheckCbx()
Dim i As Integer, bytCbx As Byte
bytCbx = 0
For i = 1 To 4
bytCbx = bytCbx Or Controls("Checkbox" & i) * -2 ^ (i - 1)
Next
Select Case bytCbx
Case 3, 5, 9, 6, 10, 12
Differenz bytCbx
End Select
End Sub
Sub Differenz(bytCbx)
Dim lRow As Long
lRow = Cells(Rows.Count, 1).End(xlUp).Row - 1
Select Case bytCbx
Case 3
Cells(2, 8).Resize(lRow).FormulaR1C1 = _
"=RC4-RC5" 'D-E
Case 5
Cells(2, 8).Resize(lRow).FormulaR1C1 = _
"=RC4-RC6" 'D-F
Case 9
Cells(2, 8).Resize(lRow).FormulaR1C1 = _
"=RC4-RC7" 'D-G
Case 6
Cells(2, 8).Resize(lRow).FormulaR1C1 = _
"=RC5-RC6" 'E-F
Case 10
Cells(2, 8).Resize(lRow).FormulaR1C1 = _
"=RC5-RC7" 'E-G
Case 12
Cells(2, 8).Resize(lRow).FormulaR1C1 = _
"=RC6-RC7" 'F-G
End Select
End Sub
Private Sub CommandButton1_Click()
If ComboBox1.Value = "2014" And ComboBox2.Value = "Region 1" Then Call W2014Region1
If ComboBox1.Value = "2014" And ComboBox2.Value = "Region 2" Then Call W2014Region2
If ComboBox1.Value = "2014" And ComboBox2.Value = "Region 3" Then Call W2014Region3
If ComboBox1.Value = "2015" And ComboBox2.Value = "Region 1" Then Call W2015Region1
If ComboBox1.Value = "2015" And ComboBox2.Value = "Region 2" Then Call W2015Region2
If ComboBox1.Value = "2015" And ComboBox2.Value = "Region 3" Then Call W2015Region3

End Sub

Private Sub CommandButton2_Click()
  
Dim objControl As Control

    For Each objControl In Controls
       Select Case TypeName(objControl)
          Case "TextBox"
             objControl.Text = ""
          Case "ComboBox"
             objControl.ListIndex = -1
          Case "CheckBox"
             objControl.Value = False
          Case "OptionButton"
             objControl.Value = False
       End Select
    Next

End Sub

Private Sub CommandButton3_Click()

End

End Sub

Private Sub Label1_Click()

End Sub

Private Sub Label2_Click()

End Sub



  

Betrifft: Differenz aus 2 eingeblendeten Spalten von: EtoPHG
Geschrieben am: 04.11.2014 12:14:51

Hallo Halbwissender,

Ähnlicher Vorschlag wie Rudi, ausser dass hier die Differenz in Spalte H gelöscht wird wenn mehr oder weniger 2 Spalten eingeblendet sind.

Private Sub CheckBox1_Click()
    Columns("D:D").EntireColumn.Hidden = Not CheckBox1
    ShowDiff
End Sub
Private Sub CheckBox2_Click()
    Columns("E:E").EntireColumn.Hidden = Not CheckBox2
    ShowDiff
End Sub
Private Sub CheckBox3_Click()
    Columns("F:F").EntireColumn.Hidden = Not CheckBox3
    ShowDiff
End Sub
Private Sub CheckBox4_Click()
    Columns("G:G").EntireColumn.Hidden = Not CheckBox4
    ShowDiff
End Sub

Sub ShowDiff()
    ' Errechnet die Differenz zwischen eingeblendeter Spalte 1 - Spalte 2
    Dim lRow As Long, lCol As Long, lOffset As Long, lOffset2 As Long
    lRow = Cells(Rows.Count, 4).End(xlUp).Row
    If (CheckBox1 + CheckBox2 + CheckBox3 + CheckBox4) = -2 Then
        For lCol = 4 To 7
            If Not Columns(lCol).EntireColumn.Hidden Then
                If lOffset = 0 Then
                    lOffset = lCol - 8
                Else
                    lOffset2 = lCol - 8
                End If
            End If
        Next lCol
        ' Differenzformel Spalte 1 - Spalte 2
        Range(Cells(2, 8), Cells(lRow, 8)).Formula = _
            "=Offset(H2,0," & lOffset & ")-Offset(H2,0," & lOffset2 & ")"
    Else
        ' Weniger oder mehr als 2 Spalten eingeblendet
        Range(Cells(2, 8), Cells(lRow, 8)).ClearContents
    End If
End Sub
Gruess Hansueli


  

Betrifft: AW: Differenz aus 2 eingeblendeten Spalten von: GefährlichesHalbwissen
Geschrieben am: 04.11.2014 12:26:53

Hallo EtoPHG,

besten Dank für deine schnelle Hilfe. Dein Code funktioniert super!

Ich habe lediglich eine letzte Frage. Gerne möchte ich die Differenzwerte in Spalte H von Zeile 3 bis 301 (H3:H301) anzeigen. Ich habe in deinem Text bereits herumgefuscht aber es trotzdem nicht hinbekommen.


  

Betrifft: AW: Differenz aus 2 eingeblendeten Spalten von: EtoPHG
Geschrieben am: 04.11.2014 15:03:33

Hallo Halbling,

Dann ersetze einfach den Code der Sub ShowDiff durch

Sub ShowDiff()
    ' Errechnet die Differenz zwischen eingeblendeter Spalte 1 - Spalte 2
    Dim lCol As Long, lOffset As Long, lOffset2 As Long
    Range(Cells(3, 8), Cells(301, 8)).ClearContents
    If (CheckBox1 + CheckBox2 + CheckBox3 + CheckBox4) = -2 Then
        For lCol = 4 To 7
            If Not Columns(lCol).EntireColumn.Hidden Then
                If lOffset = 0 Then
                    lOffset = lCol - 8
                Else
                    lOffset2 = lCol - 8
                End If
            End If
        Next lCol
        ' Differenzformel Spalte 1 - Spalte 2
        Range(Cells(3, 8), Cells(301, 8)).Formula = _
            "=Offset(H3,0," & lOffset & ")-Offset(H3,0," & lOffset2 & ")"
    End If
End Sub
Gruess Hansueli


  

Betrifft: AW: Differenz aus 2 eingeblendeten Spalten von: GefährlichesHalbwissen
Geschrieben am: 04.11.2014 15:58:30

Hallo Hansueli,

besten Dank für deine superfixe Hilfe. Ich habe mein Excel-Sheet jetzt um eine fünfte Checkbox erweitert und deine Formel dementsprechend abgeändert. Sie sieht jetzt wie folgt aus:

Sub ShowDiff()
    ' Errechnet die Differenz zwischen eingeblendeter Spalte 1 - Spalte 2
    Dim lCol As Long, lOffset As Long, lOffset2 As Long
    Range(Cells(3, 8), Cells(301, 8)).ClearContents
    If (CheckBox1 + CheckBox2 + CheckBox3 + CheckBox4 + CheckBox5) = -2 Then
        For lCol = 4 To 8
            If Not Columns(lCol).EntireColumn.Hidden Then
                If lOffset = 0 Then
                    lOffset = lCol - 8
                Else
                    lOffset2 = lCol - 8
                End If
            End If
        Next lCol
        ' Differenzformel Spalte 1 - Spalte 2
        Range(Cells(3, 8), Cells(301, 8)).Formula = _
            "=Offset(I3,0," & lOffset & ")-Offset(I3,0," & lOffset2 & ")"
    End If
End Sub
Wenn ich dementsprechend zwei aus den fünf Checkboxen auswähle wird wie gewünscht das Makro aktiviert. Allerdings wird der Wert weiterhin nur in Zelle I2 (ehemals H2) angezeigt und nicht wie von mir ursprünglich gedacht ab I3:I301 (ehemals H3:H301). Irgendetwas mache ich dort noch falsch. Kannst du vielleicht ein letztes Mal über meinen Code schauen? Vielen, vielen Dank!!!


  

Betrifft: AW: Differenz aus 2 eingeblendeten Spalten von: EtoPHG
Geschrieben am: 04.11.2014 16:48:00

Hallo Halbling,

Na ja, irgendwie sollte man schon wissen was man tut, wenn man an Code rumfummelt. Vor allem sollte man ihn lesen und verstehen. Wenn du nun den unteren Code mit deinen (fehlgeschlagenen) Versuchen vergleichst, müsstest du wohl draufkommen, was die Zahl 8 für eine Bedeutung hatte (v.a. da wo sie durch 9 ersetzt wurde!).

Sub ShowDiff()
    ' Errechnet die Differenz zwischen eingeblendeter Spalte 1 - Spalte 2
    Dim lCol As Long, lOffset As Long, lOffset2 As Long
    Range(Cells(3, 9), Cells(301, 9)).ClearContents
    If (CheckBox1 + CheckBox2 + CheckBox3 + CheckBox4 + CheckBox5) = -2 Then
        For lCol = 4 To 8
            If Not Columns(lCol).EntireColumn.Hidden Then
                If lOffset = 0 Then
                    lOffset = lCol - 9
                Else
                    lOffset2 = lCol - 9
                End If
            End If
        Next lCol
        ' Differenzformel Spalte 1 - Spalte 2
        Range(Cells(3, 9), Cells(301, 9)).Formula = _
            "=Offset(I3,0," & lOffset & ")-Offset(I3,0," & lOffset2 & ")"
    End If
End Sub
Tipp: Drück doch im VBE-Editor einfach mal auf F1, wenn der Cursor im VBE in einem Wort wie Ra|nge(Cells(3, 9), Cells(301, 9)).
Gruess Hansueli


  

Betrifft: AW: Differenz aus 2 eingeblendeten Spalten von: GefährlichesHalbwissen
Geschrieben am: 05.11.2014 08:52:26

Hallo,
tut mir wirklich leid für diese endlosen Nachfragen, ich stehe halt noch ziemlich am Anfang des Lernprozesses. Bin quasi Quereinsteiger ;-) Aber nochmals vielen, vielen Dank für deine Hilfe. Jetzt läuft alles wie geschmiert!


 

Beiträge aus den Excel-Beispielen zum Thema "Makros ausführen bei zwei aktivierten Checkboxen"