2010-09-28 8 views
16

una pregunta tan simple, pero no puedo encontrar la respuesta (Google, MS ayuda, SO):Determinar si se comprueba una casilla de verificación acceso o no

¿Cómo puedo comprobar por VBA si una casilla de verificación no unido en un formulario de Access es verificado por el usuario o no? No puedo encontrar la propiedad correcta.

¡Gracias de antemano!

ACTUALIZACIÓN:

He utilizado este código después de las sugerencias de @HansUp y @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 

segundo ACTUALIZACIÓN:

El código debe ser esto (gracias 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 

Respuesta

19

Las casillas de verificación son un tipo de control diseñado para un propósito, para asegurar la entrada válida de valores booleanos.

En Access, hay dos tipos:

  1. 2-estado - puede ser activada o desactivada, pero no nulo. Los valores son Verdadero (marcado) o Falso (sin marcar). En Access y VBA el valor de True es -1 y el valor de False es 0. Para la portabilidad con entornos que usan 1 para True, siempre puedes probar False o Not False, ya que False es el valor 0 para todos los entornos que conozco de.

  2. 3-state: como el estado 2, pero puede ser nulo. Al hacer clic en él se pasa a True/False/Null. Esto es para enlazar a un campo entero que permite nulos. No sirve de nada con un campo booleano, que nunca puede ser nulo.

problemilla con las respuestas:

Casi nunca hay necesidad de utilizar la propiedad .Value de un control de acceso, ya que es la propiedad predeterminada. Estos dos son equivalentes:

?Me!MyCheckBox.Value 
    ?Me!MyCheckBox 

El gotcha aquí es que es importante tener cuidado de que no se crea referencias implícitas al probar el valor de una casilla de verificación. En lugar de esto:

If Me!MyCheckBox Then 

... escribir una de estas opciones:

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 

Del mismo modo, al escribir subrutinas o funciones que obtienen los valores de un control de Boole, declarar siempre sus parámetros booleanos como ByVal menos en realidad quieres manipular el control. En ese caso, el tipo de datos de su parámetro debe ser un control de acceso y no un valor booleano. Cualquier otra cosa corre el riesgo de referencias implícitas.

Por último, si configura el valor de una casilla de verificación en el código, puede establecerlo en cualquier número, no solo en 0 y -1, pero cualquier número que no sea 0 se trata como True (porque no es falso)Si bien puede usar ese tipo de cosas en un formulario HTML, no es un diseño de interfaz de usuario adecuado para una aplicación de Access, ya que no hay forma de que el usuario pueda ver qué valor se almacena realmente en el control, lo que frustra el propósito de eligiéndolo para editar sus datos.

+0

¡Muchas gracias! (de nuevo) – waanders

4

Consultar en yourCheckBox.Value?

+0

Gracias. Esperaba (en Microsoft) una propiedad llamada "Checked" o algo así. Pero ningún valor (o 0) = no verificado y un valor significa 'verificado'. ¿Derecha? – waanders

+0

Por lo que recuerdo, '.Value = True' if Checked –

Cuestiones relacionadas