Informationen und Beispiele zum Thema CheckBox | |
---|---|
![]() |
CheckBox-Seite mit Beispielarbeitsmappe aufrufen |
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
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