2010-09-28 7 views
16

Tale domanda semplice, ma non riesco a trovare la risposta (Google, MS aiuto, SO):Determinare se una casella di controllo di accesso è selezionata o meno

Come posso controllare da VBA se un casella di controllo non associato una maschera di Access è controllato dall'utente o no? Non riesci a trovare la proprietà giusta.

Grazie in anticipo!

UPDATE:

Ho usato questo codice dopo i consigli di @HansUp e @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 

2 ° UPDATE:

Il codice dovrebbe essere questo (grazie a @ 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 

risposta

19

Le caselle di controllo sono un tipo di controllo progettato per uno scopo, per assicurare l'immissione di valori booleani validi.

In Access, ci sono due tipi:

  1. 2-Stato - può essere controllato o incontrollato, ma non nullo. I valori sono True (selezionato) o False (deselezionato). In Access e VBA il valore di True è -1 e il valore di False è 0. Per la portabilità con ambienti che utilizzano 1 per True, puoi sempre eseguire il test su False o Not False, poiché False è il valore 0 per tutti gli ambienti che conosco di.

  2. 3-state - come il 2-state, ma può essere Nullo. Facendo clic ciclicamente su True/False/Null. Questo è per il collegamento a un campo intero che consente i null. Non è utile con un campo booleano, che non può mai essere Nullo.

un piccolo inconveniente con le risposte:

Non c'è quasi mai la necessità di utilizzare la proprietà .Value di un controllo di accesso, in quanto è la proprietà predefinita. Questi due sono equivalenti:

?Me!MyCheckBox.Value 
    ?Me!MyCheckBox 

L'unica Gotcha qui è che è importante stare attenti che non si crea riferimenti impliciti quando si verifica il valore di una casella di controllo. Invece di questo:

If Me!MyCheckBox Then 

... scrivere una di queste opzioni:

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 

Allo stesso modo, durante la scrittura di subroutine o funzioni che ottengono i valori da un controllo booleano, sempre dichiarare i parametri booleani come ByVal a meno in realtà vuoi manipolare il controllo. In tal caso, il tipo di dati del parametro deve essere un controllo di accesso e non un valore booleano. Qualcos'altro corre il rischio di riferimenti impliciti.

Infine, se si imposta il valore di una casella di controllo nel codice, è possibile impostarlo su qualsiasi numero, non solo su 0 e -1, ma qualsiasi numero diverso da 0 viene considerato come Vero (perché non è Falso).Mentre potresti usare quel tipo di cose in un modulo HTML, non è il design dell'interfaccia utente corretto per un'app Access, poiché non c'è modo per l'utente di essere in grado di vedere quale valore è effettivamente memorizzato nel controllo, il che sconfigge lo scopo di scegliendolo per modificare i tuoi dati.

+0

Grazie mille! (ancora) – waanders

4

Verificare su yourCheckBox.Value?

+0

Grazie. Mi aspettavo (nel modo Microsoft) una proprietà chiamata "Controllata" o qualcosa del genere. Ma nessun valore (o 0) = non controllato e un valore significa 'controllato'. Destra? – waanders

+0

Per quanto ne ricordo, '.Value = True' se selezionato –