Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1388to1392
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makros ausführen bei zwei aktivierten Checkboxen

Makros ausführen bei zwei aktivierten Checkboxen
04.11.2014 10:49:56
GefährlichesHalbwissen
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 :)

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makros ausführen bei zwei aktivierten Checkboxen
04.11.2014 11:41:08
Rudi
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

Anzeige
AW: Makros ausführen bei zwei Checkboxen
04.11.2014 12:12:32
GefährlichesHalbwissen
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

Anzeige
Differenz aus 2 eingeblendeten Spalten
04.11.2014 12:14:51
EtoPHG
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

Anzeige
AW: Differenz aus 2 eingeblendeten Spalten
04.11.2014 12:26:53
GefährlichesHalbwissen
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.

AW: Differenz aus 2 eingeblendeten Spalten
04.11.2014 15:03:33
EtoPHG
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

Anzeige
AW: Differenz aus 2 eingeblendeten Spalten
04.11.2014 15:58:30
GefährlichesHalbwissen
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!!!

Anzeige
AW: Differenz aus 2 eingeblendeten Spalten
04.11.2014 16:48:00
EtoPHG
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

Anzeige
AW: Differenz aus 2 eingeblendeten Spalten
05.11.2014 08:52:26
GefährlichesHalbwissen
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!

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige