MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 04.11.2019, 10:21   #1
Lichtwelle
MOF User
MOF User
Standard VBA - Unbestimmten Wert bei Checkbox unmöglich machen

Guten Tag,

eine Checkbox kann grundsätzlich 3 Zustände haben: true, false, undetermined.

Wie kann man dafür sorgen, dass die Checkbox nur den Wert true oder false haben kann? Ich habe schon bei den Eigenschaften / Properties "Triple state" auf falsch gesetzt aber das bringt noch nichts: Wird beim initializen kein Wert zugewiesen, bleibt es bei unbestimmt. Kann man irgendwas machen, damit es in so einem Fall als falsch steht?

Gut, notfalls kann man dafür sorgen, dass die Spreadsheet mit dem Initializewert entweder wahr oder falsch hat... Aber wenn die Checkbox diese Maßnahme nicht benötigen würde, wäre es noch besser.

Danke für eure Inputs.
Lichtwelle ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.11.2019, 10:31   #2
Mase
MOF Koryphäe
MOF Koryphäe
Standard

Moinsen,

Wozu soll das wichtig sein?

__________________

gruß
Marco

Feedback erwünscht.
Wie ? -> Verwende hierzu das mittlere Symbol links.
Mase ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.11.2019, 10:48   #3
Lichtwelle
Threadstarter Threadstarter
MOF User
MOF User
Standard

Es würde die Programmierung erleichtern, indem man nur 2 Fälle vorsehen muss statt 3.

Optisch ist es etwas unklar, wie man eine Checkbox mit undefiniertem Wert verstehen soll: es ist "gecheckt" aber erscheint graulich... Manch einer wird so eine Box als gecheckt verstehen, ein anderer wird sich wundern usw.
Lichtwelle ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.11.2019, 11:30   #4
EarlFred
MOF Guru
MOF Guru
Standard

Checkboxen haben die Eigenschaft "TripleState". Bei WAHR hast Du den 3. Zustand (NULL), bei FALSCH nur Wahr oder Falsch.
Setze TripleState also auf FALSCH

__________________

Datum und Uhrzeit, Makrorekorder-Code entschlacken, {Matrixformeln}
Tutorials zu Pivottabellen: Kurzeinstieg; Dynamischer Datenbereich; Daten und Zeiten gruppieren
Für 8 meiner Beiträge haben sich die Hilfesuchenden mit einer Spende an Wikipedia, die Tafeln oder Hilfe für krebskranke Kinder eV bedankt (das entspricht 0,054% per 13.08.2019) - eine tolle Geste!
EarlFred ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.11.2019, 11:47   #5
Mase
MOF Koryphäe
MOF Koryphäe
Standard

Zitat: von Lichtwelle Beitrag anzeigen

Es würde die Programmierung erleichtern, indem man nur 2 Fälle vorsehen muss statt 3.

Optisch ist es etwas unklar, wie man eine Checkbox mit undefiniertem Wert verstehen soll: es ist "gecheckt" aber erscheint graulich... Manch einer wird so eine Box als gecheckt verstehen, ein anderer wird sich wundern usw.

Hm, also kein besonders wichtiger Grund.
https://support.office.com/de-de/art...5-23a53abea0dc

__________________

gruß
Marco

Feedback erwünscht.
Wie ? -> Verwende hierzu das mittlere Symbol links.
Mase ist gerade online  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.11.2019, 20:21   #6
Lichtwelle
Threadstarter Threadstarter
MOF User
MOF User
Standard

Zitat: von Mase Beitrag anzeigen

Hm, also kein besonders wichtiger Grund.
https://support.office.com/de-de/art...5-23a53abea0dc

Wenn ich die Checkbox auf TripleState = Falsch setze, dann ist es leider nicht so, als ob ein Nullwert als Nein interpretiert würde. Zumindest sieht es nicht so aus: die Checkbox ist angeklickt und grau.
Lichtwelle ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.11.2019, 22:09   #7
Mase
MOF Koryphäe
MOF Koryphäe
Standard

Hm,
interpretierst Du die Onlinehilfe richtig?

Welche Ergebnisse liefern Dir folgende Zeilen:
Code:

Private Sub CommandButton1_Click()
    Select Case CheckBox1.Value
        Case -1 'True
        CheckBox1.Caption = CheckBox1.Value
        Case 0 'False
        CheckBox1.Caption = CheckBox1.Value
        Case Else 'Null
        CheckBox1.Caption = "NULL = " & IsNull(CheckBox1.Value)
    End Select
End Sub
Hinweis:
  • zeichne eine UserForm [UserForm1]
  • zeichne eine Checkbox auf der UserForm [CheckBox1]
  • zeichne ein Button auf der Userform [CommandButton1]
  • Triple-State = True/False jeweils testen
  • sicherstellen, dass keine Änderung der Triple-State-Property während der Laufzeit bewirkt wird
  • __________________

    gruß
    Marco

    Feedback erwünscht.
    Wie ? -> Verwende hierzu das mittlere Symbol links.

    Geändert von Mase (04.11.2019 um 22:16 Uhr).
    Mase ist gerade online  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 05.11.2019, 08:33   #8
    EarlFred
    MOF Guru
    MOF Guru
    Standard

    Zitat:

    Wenn ich die Checkbox auf TripleState = Falsch setze, dann ist es leider nicht so, als ob ein Nullwert als Nein interpretiert würde. Zumindest sieht es nicht so aus: die Checkbox ist angeklickt und grau.

    Wenn Du TripleState auf False setzt, ändert das nicht den aktuellen Wert der Checkbox! Wenn der Wert Null ist, bleibt er es auch. Du musst der Checkbox also noch den gewünschten Wert zuweisen.

    TripleState wirkt sich übrigens nur auf die Interaktion mit dem Nutzer, also das Klicken auf die Checkbox aus. Per Code kannst Du immer den Wert Null zuweisen, unabhängig von der Eigenschaft TripleState.

    In der OH steht übrigens nichts davon, dass Null als Falsch interpretiert würde.

    __________________

    Datum und Uhrzeit, Makrorekorder-Code entschlacken, {Matrixformeln}
    Tutorials zu Pivottabellen: Kurzeinstieg; Dynamischer Datenbereich; Daten und Zeiten gruppieren
    Für 8 meiner Beiträge haben sich die Hilfesuchenden mit einer Spende an Wikipedia, die Tafeln oder Hilfe für krebskranke Kinder eV bedankt (das entspricht 0,054% per 13.08.2019) - eine tolle Geste!

    Geändert von EarlFred (05.11.2019 um 08:40 Uhr).
    EarlFred ist offline  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 05.11.2019, 11:47   #9
    knobbi38
    MOF Profi
    MOF Profi
    Standard

    Hallo,

    wenn man schon Links angibt, dann sollten sie zum Thema passen und sich nicht auf ein Access-Steuerelement beziehen! Das sind andere Steuerelemente und haben mit MS Forms 2.0 Steuerelementen wenig zu tun. Hier die Links für MSForms:

    https://docs.microsoft.com/de-de/off...eckbox-control
    https://docs.microsoft.com/de-de/off...state-property

    Wenn die TripleState Eigenschaft False ist, sagt das doch nur aus, daß nur die Zustände True/False eingeben werden können. Wenn aber die Checkbox nicht initialisiert ist, also den Wert NULL besitzt, was soll dann angezeigt werden? Also wird das graue Kästchen angezeigt, was dem NULL Wert entspricht, um darzustellen, daß bisher keine Initialisierung stattgefunden hat. Das ist kein Problem, sondern by Design und absolut richtig. Möchte man das nicht haben, muß einmalig eine Initialisierung mit True/False gemacht werden, um einen definierten Zustand zu erreichen.
    Das ist Programmierung im wahrsten sinne des Wortes: per Initialisierung eine definierten Ausgangszustand erreichen.

    Ulrich
    knobbi38 ist gerade online  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 05.11.2019, 12:35   #10
    Mase
    MOF Koryphäe
    MOF Koryphäe
    Standard

    Zitat: von knobbi38 Beitrag anzeigen

    Hallo,

    wenn man schon Links angibt, dann sollten sie zum Thema passen und sich nicht auf ein Access-Steuerelement beziehen!

    Richtig. Mein Fehler.
    ¹Wurde am 05.11.2019, 08:33 bereits korrigiert, wie ich sehe.

    __________________

    gruß
    Marco

    Feedback erwünscht.
    Wie ? -> Verwende hierzu das mittlere Symbol links.

    Geändert von Mase (05.11.2019 um 13:14 Uhr). Grund: ¹
    Mase ist gerade online  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 07.11.2019, 21:49   #11
    Lichtwelle
    Threadstarter Threadstarter
    MOF User
    MOF User
    Standard

    Vielen Dank für eure Hilfe. Nun ist die Sache klar und ich werde einen Initialwert zuweisen.

    Ich werde (1) einen Wert in die Zelle des Spreadsheets eingeben und (2) dachte als 2. "Verteidigungslinie" an einen Code in der Initialize-Prozedur a la

    If Worksheets("Wasauchimmer").Cells(1, 1).Value <> True and _
    Worksheets("Wasauchimmer").Cells(1, 1).Value <> False then
    Me.CheckBox1.Value = False
    end if

    Wäre das ok oder habt ihr eine bessere Idee?
    Lichtwelle ist offline  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 08.11.2019, 01:59   #12
    knobbi38
    MOF Profi
    MOF Profi
    Top

    Hallo Lichtwelle,

    ist ein bißchen umständlich.
    Hier etwas vereinfacht, Initialisierung entweder mit dem Default-Wert oder dem Zellwert:
    Code:

      CheckBox1 = cbool(False Or Worksheets("Wasauchimmer").Cells(1, 1).Value)
    Setzt natürlich voraus, daß in den entsprechenden Zellen nur Wahrheitswerte stehen. Wenn das nicht der Fall ist, ginge es auch so:
    Code:

      Select Case Worksheets("Wasauchimmer").Cells(1, 1).Value
        Case Empty, True, False
          CheckBox1 = cbool(False Or Worksheets("Wasauchimmer").Cells(1, 1).Value)
        Case Else                   ' no logical value
          CheckBox1 = False
      End Select
    Ulrich

    Geändert von knobbi38 (08.11.2019 um 02:13 Uhr).
    knobbi38 ist gerade online  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 08.11.2019, 20:07   #13
    Lichtwelle
    Threadstarter Threadstarter
    MOF User
    MOF User
    Standard

    Zitat: von knobbi38 Beitrag anzeigen

    Hallo Lichtwelle,

    ist ein bißchen umständlich.
    Hier etwas vereinfacht, Initialisierung entweder mit dem Default-Wert oder dem Zellwert:

    Code:

      CheckBox1 = cbool(False Or Worksheets("Wasauchimmer").Cells(1, 1).Value)
    Setzt natürlich voraus, daß in den entsprechenden Zellen nur Wahrheitswerte stehen. Wenn das nicht der Fall ist, ginge es auch so:
    Code:

      Select Case Worksheets("Wasauchimmer").Cells(1, 1).Value
        Case Empty, True, False
          CheckBox1 = cbool(False Or Worksheets("Wasauchimmer").Cells(1, 1).Value)
        Case Else                   ' no logical value
          CheckBox1 = False
      End Select
    Ulrich

    Danke für deine Antwort.

    Was meinst du mit

    cbool(False Or Worksheets("Wasauchimmer").Cells(1, 1).Value) ?

    "Falsch oder Zelleninhalt" ist kein Ausdruck, den man als richtig oder falsch bezeichnen kann (wie A = B), oder verstehe ich das nicht richtig??? Wenn in der Zelle der Wert "Wahr" stünde, was würde das denn bezwecken? "Boolean(falsch oder wahr)" …
    Lichtwelle ist offline  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 09.11.2019, 15:48   #14
    knobbi38
    MOF Profi
    MOF Profi
    Standard

    Hallo Lichtwelle,

    Zitat:

    Was meinst du mit
    cbool(False Or Worksheets("Wasauchimmer").Cells(1, 1).Value) ?

    "Falsch oder Zelleninhalt" ist kein Ausdruck, den man als richtig oder falsch bezeichnen kann (wie A = B), oder verstehe ich das nicht richtig??? Wenn in der Zelle der Wert "Wahr" stünde, was würde das denn bezwecken? "Boolean(falsch oder wahr)" …

    Doch, der Ausdruck ist natürlich ein normaler logischer Ausdruck.
    Code:

    "Boolean(falsch oder wahr)" ergibt im Ergebnis Wahr
    Unter der Annahme, daß der Zellinhalt folgende Werte "Empty, True, False" annehmen kann, kannst du mit dem Ausdruck eine Wahrheitstabelle aufstellen. Dann wirst du erkennen, daß das Ergebnis dieses Ausdrucks die Checkbox immer richtig vorbelegt.

    Der eigentliche "Trick" hinter den Kulissen, den ich hier verwende, ist der Umgang mit dem Wert "Empty". "False or Empty" ergibt 0 und in einen boolschen Wert konvertiert ist das Ergebnis dann "False". Das ist genau das Verhalten, welches für die Initialisierung der Checkbox benötigt wird.

    Gruß Ulrich

    PS: bitte kein "Fullquote"

    Geändert von knobbi38 (09.11.2019 um 16:02 Uhr).
    knobbi38 ist gerade online  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Alt 09.11.2019, 15:59   #15
    knobbi38
    MOF Profi
    MOF Profi
    Standard

    Hallo, noch einen kleinen Nachtrag:
    immer mal wieder sieht man einen Ausdruck wie:
    Code:

    if irgendetwas = true then ...
    oder
    if irgendetwas = false then ...
    was doppelt gemoppelt ist.
    If bewertet den Ausdruck nach true/false und da braucht es vorher keinen weiteren Vergleich mehr.
    Keine Ahnung, woher diese "Unsitte" kommt. Im Prinzip heißt das einfach:
    Code:

    if irgendetwas then ... true
    oder
    if not irgendetwas then ... false
    Ulrich
    knobbi38 ist gerade online  
    verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
    Antworten Auf Beitrag antworten
    Ads
    Antworten


    Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
     
    Themen-Optionen
    Ansicht

    Forumregeln
    Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
    Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
    Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
    Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

    vB Code ist An.
    Smileys sind An.
    [IMG] Code ist An.
    HTML-Code ist An.
    Gehe zu


    Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.



    Powered by: vBulletin Version 3.6.2 (Deutsch)
    Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

    Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
    Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
    Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
    ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.