web-dev-qa-db-fra.com

Déterminez si une case à cocher Accès est cochée ou non

Une question aussi simple, mais je ne trouve pas la réponse (Google, MS Help, SO):

Comment puis-je vérifier par VBA si une case à cocher non liée sur un formulaire d'accès est cochée par l'utilisateur ou non? Impossible de trouver la bonne propriété.

Merci d'avance!

MISE À JOUR:

J'ai utilisé ce code après les suggestions de @HansUp et @RC:

Private Sub CmdTest_Click()
    MsgBox "Check1.Value = " & Me.Check1.Value
    MsgBox "Check2.Value = " & Me.Check2.Value
End Sub

Private Sub Form_Load()
    Me.Check1.Value = 25
    Me.Check2.Value = 50
End Sub

2e MISE À JOUR:

Le code devrait être le suivant (merci à @ David-W-Fenton):

Private Sub CmdTest_Click()
    If Me.Check1 = True Then
        MsgBox "Check1 IS CHECKED"
    Else
        MsgBox "Check1 IS NOT CHECKED"
    End If
    If Me.Check2 = True Then
        MsgBox "Check2 IS CHECKED"
    Else
        MsgBox "Check2 IS NOT CHECKED"
    End If    
End Sub

Private Sub Form_Load()
    ' set first checkbox default checked
    Me.Check1.Value = True 
    ' set second checkbox default unchecked
    Me.Check2.Value = False
End Sub
20
waanders

Les cases à cocher sont un type de contrôle conçu dans un seul but: garantir une entrée valide des valeurs booléennes.

Dans Access, il existe deux types:

  1. 2 états - peut être coché ou décoché, mais pas Null. Les valeurs sont True (cochée) ou False (non cochée). Dans Access et VBA, la valeur de True est -1 et la valeur de False est 0. Pour la portabilité avec les environnements qui utilisent 1 pour True, vous pouvez toujours tester False ou Not False, puisque False est la valeur 0 pour tous les environnements I entendu parler.

  2. 3 états - comme le 2 états, mais peut être nul. Cliquer dessus fait défiler True/False/Null. C'est pour la liaison à un champ entier qui autorise les Nulls. Il ne sert à rien avec un champ booléen, car il ne peut jamais être nul.

Petit problème avec les réponses:

Il n'est presque jamais nécessaire d'utiliser la propriété .Value d'un contrôle d'accès, car c'est la propriété par défaut. Ces deux sont équivalents:

  ?Me!MyCheckBox.Value
  ?Me!MyCheckBox

Le seul problème ici est qu'il est important de faire attention à ne pas créer de références implicites lors du test de la valeur d'une case à cocher. Au lieu de cela:

  If Me!MyCheckBox Then

... écrivez l'une de ces options:

  If (Me!MyCheckBox) Then  ' forces evaluation of the control

  If Me!MyCheckBox = True Then

  If (Me!MyCheckBox = True) Then

  If (Me!MyCheckBox = Not False) Then

De même, lorsque vous écrivez des sous-routines ou des fonctions qui obtiennent des valeurs d'un contrôle booléen, déclarez toujours vos paramètres booléens comme ByVal, sauf si vous voulez réellement manipuler le contrôle. Dans ce cas, le type de données de votre paramètre doit être un contrôle d'accès et non une valeur booléenne. Tout le reste court le risque de références implicites.

Enfin, si vous définissez la valeur d'une case à cocher dans le code, vous pouvez réellement la définir sur n'importe quel nombre, pas seulement 0 et -1, mais tout nombre autre que 0 est traité comme vrai (car ce n'est pas faux). Bien que vous puissiez utiliser ce genre de chose dans un formulaire HTML, ce n'est pas une conception d'interface utilisateur appropriée pour une application Access, car il n'y a aucun moyen pour l'utilisateur de voir quelle valeur est réellement stockée dans le contrôle, ce qui va à l'encontre de l'objectif de en le choisissant pour éditer vos données.

22
David-W-Fenton

Vérifier yourCheckBox.Value?

4
user180100