Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen

Fehler bei Abfrage mehrerer Checkboxen


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

Beiträge aus dem Excel-Forum zum Thema "Fehler bei Abfrage mehrerer Checkboxen"