Herbers Excel-Forum - das Archiv

Fehler bei Abfrage mehrerer Checkboxen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:


Betrifft: Fehler bei Abfrage mehrerer Checkboxen
von: scipiol

Geschrieben am: 10.09.2019 16:20:06
Hallo Forumsmitglieder,
in meinem Deckblatt habe ich mehrere Checkboxen, über die ich die nachfolgenden Blätter nach Bedarf ein- und ausblenden kann. Das ganze sieht so aus (ist nur ein Auszug):

If ActiveSheet.CheckBoxes("Kontrollkästchen1").Value = 1 Then
Sheets("Einstellung Ring DC").Visible = True
Else
Sheets("Einstellung Ring DC").Visible = False
End If
If ActiveSheet.CheckBoxes("Kontrollkästchen2").Value = 1 Then
Sheets("Berechnung Ströme DC").Visible = True
Else
Sheets("Berechnung Ströme DC").Visible = False
End If
If ActiveSheet.CheckBoxes("Kontrollkästchen7").Value = 1 Then
Sheets("Berechnung Ströme AC").Visible = True
Else
Sheets("Berechnung Ströme AC").Visible = False
End If

Das Ausblenden funktioniert einwandfrei. Setze ich jedoch die Checkbox, um das Blatt wieder einzublenden, tut er dies und ein "Fehler 400" erscheint, sobald er die Abfrage des nächsten Kontrollkästchens ausführt.
Ich sehe den Wald vor lauter Bäumen nicht mehr, da es in einigen seltenen Fällen so wie gewünscht funktioniert.
Vielen Dank schonmal für die Hilfe.
Grüße scipiol

Betrifft: AW: Fehler bei Abfrage mehrerer Checkboxen
von: 1712308.html

Geschrieben am: 10.09.2019 16:55:32
Hallo,
angenommen, du wählst Kontrollkästchen7 aus.
Dein Code beginnt mit Überprüfung von Kontrollkästchen1
wenn Value = 1, dann, sonst...
das Gleiche geschieht bei Kontrollkästchen2
wenn Value = 1, dann, sonst...
Bevor also dein Kontrollkästchen7 an der Reihe ist, werden - jedesmal - alle anderen Kontrollkästchen überprüft.
Du müsstest vielleicht eine Funktion einbauen, die sicherstellt, dass deine IF/Then/Else-Prüfung - nur einmal - durchgefügrt wird.
Ich hab für einen Code gerade keine Zeit, deswegen lass ich mal offen.
Hilfts denn schon mal?
Ciao
Thorsten

Betrifft: AW: Fehler bei Abfrage mehrerer Checkboxen
von: 1712312.html

Geschrieben am: 10.09.2019 17:08:52
HI
das ist so schwer zu sagen.
es wäre hier hilfreich, wenn du die Datei mit dem Fehler hochlädst.
denn aus dem Code allein ist der Fehler für mich nicht ersichtlich.
Es wird von VBA zwar akzeptiert, aber eigentlich ist die Eigenschaft .Visible eines Tabellenblatts mit True und False, sondern es gibt drei Zustände: xlSheetVisible (-1), xlSheetHidden (0) und xlSheetVeryHidden (2)
der Unterschied ist, dass bei xlSheetVeryHidden das Blatt nicht mehr vom Anwender über das Menü, sondern nur über VBA wieder eingeblendet werden kann.
du könntest deinen Code so auf eine Zeile pro Tabellenblatt verkürzen:
Sheets("Einstellung Ring DC").Visible = IIF(ActiveSheet.CheckBoxes("Kontrollkästchen1").Value = 1, xlSheetVisilbe, xlSheetHidden)
Gruß Daniel

Betrifft: AW: Fehler bei Abfrage mehrerer Checkboxen
von: 1712314.html
Geschrieben am: 10.09.2019 17:10:54
Hallo Thorsten,
danke erstmal für die Antwort. Der Ablauf ist eigentlich so gewünscht, da der User auch mehrere Blätter ausblenden/einblenden können soll.
Macht das einen Unterschied?
Gruß

Betrifft: AW: Fehler bei Abfrage mehrerer Checkboxen
von: 1712338.html

Geschrieben am: 10.09.2019 19:34:09
Hi
ja, das kann einen Unterschied machen, wenn der gezeigte Code in deiner Datei genau so untereinander steht wie du es zeigst.
Denn egal, welches Kästchen du auswählst, es werden immer alle if/then/else geprüft und bei allen außer dem um den es geht wird der else-code ausgeführt.
Und der Hinweis von Werni, ActiveX Checkboxen zu verwenden, wäre auch für mich die bessere Wahl, weil eben einfacher zu programmieren.
Ich hab dir mal ein kleines Bsp gebastelt:
https://www.herber.de/bbs/user/131962.xlsm
In meiner Datei werden ActiveX Komponenten verwendet. Man muss nicht extra einer CheckBox ein Makro zuweisen, sondern man kann aus der Tabelle heraus mit Rechtsklick auf die CheckBox den VBE aktivieren.
Wie du siehst, gebe ich nach einem Klick die Werte für Value + Blattnamen an ein Unterprogramm weiter.
Und da Value in diesem Fall eh nur True oder False ist, benötigt man im Unterprogramm nicht mal If/Then/Else.
Wieso Unterprogramm?
Ohne dem müsste man für jede CheckBox den gleichen Code reinschreiben.
mit Unterprogramm kann es effizient bleiben, man schreibt nur so viel CBA-Code, wie erforderlich ist.
Hilfts?
Ciao
Thorsten

Betrifft: Vielen Dank @Thorsten, Werni und Daniel
von: 1712430.html

Geschrieben am: 11.09.2019 11:19:42
Ich habe es jetzt über die ActiveX Checkbox gelöst.
Damit ist das Problem behoben.
Mir ist jetzt auch der eigentliche Fehler aufgefallen. Waren bspw. 3 Blätter ausgeblendet und man hat sie wieder eingeblendet, dann wird die erste If durchlaufen und da der Haken gesetzt ist, auch das entsprechende Blatt eingeblendet. Dieses ist dann aber auch das "aktive" Blatt. Dadurch kann die Abfrage beim nächsten If gar nicht mehr das nächste Kontrollkästchen finden. Das löst dann den Fehler 400 aus.
Dachte, dass es sinnvoll ist, das nochmal zu erwähnen.
Die neue Variante ist natürlich viel eleganter. Also Danke nochmal für die Hilfe!
Gruß scipiol

Betrifft: AW: Vielen Dank @Thorsten, Werni und Daniel
von: 1712431.html

Geschrieben am: 11.09.2019 11:27:43
Hi
deswegen sollte man auch möglichst kein "ActiveSheet" verwenden, sondern immer das Tabellenblatt konkret angeben.
Dann läuft der Code auch durch.
auch kann man viel "Bildschirmgeflackere" vermeiden, wenn man das ein- oder ausblenden nur dann durchführt, wenn es notwendig ist.
also statt: Sheets(..).Visible = xlsheetVisible
dann besser: If Sheets(..).Visible <> xlSheetVisible Then Sheets(..).Visible = xlsheetVisible

ist zwar mehr Code, aber erspart Excel unnötige Arbeit.
Gruß Daniel

Betrifft: AW: Fehler bei Abfrage mehrerer Checkboxen
von: 1712316.html
Geschrieben am: 10.09.2019 17:12:15
Wo genau steht der Code denn?

Betrifft: AW: Fehler bei Abfrage mehrerer Checkboxen
von: 1712325.html
Geschrieben am: 10.09.2019 17:51:35
Hallo scipiol
Wenn du ActiveX Checkboxen nimmst ists einfacher

Private Sub CheckBox1_Click()
Sheets("Einstellung Ring DC").Visible = Not CheckBox1.Value
End Sub

Und dieser Code ins Modul des Arbeitsblattes in dem die Checkbox ist.
Gruss Werni
Excel-Beispiele zum Thema "Fehler bei Abfrage mehrerer Checkboxen"
Fehlermeldung #NV ausblenden Fehlermeldung abfangen
Fehler in Workbook_Open-Prozedur abfangen Fehlermeldung #DIV/0! verhindern
Fehler entfernen Fehlermeldung abfangen und in sequentielle Datei schreiben
Fortlaufende Suche unter Vermeidung eines Laufzeitfehlers VBA-Fehlermeldungen auflisten
Alle Zellen mit der #BEZUG!-Fehlermeldung auswählen Zahlenstring mit Formel auslesen und Fehlermeldung verhindern
Bewerten Sie hier bitte das Excel-Portal