2011-04-14 11 views
19

Tengo un cuadro de texto y un botón en mi formulario de acceso. En el evento click del botón, quiero ver si el cuadro de texto está vacío, si es así, no se ejecutará nada. así que utilizoProblema nulo de cuadro de texto

If Me.textbox.Value = Null Then 
    Exit Sub 
End if 

Pero esto no funciona ... he comprobado la textbox.value en la ventana de ejecución y es nulo, pero la cláusula si simplemente no funciona ... ¿Por qué?

EDITAR: @Dimse, lo intenté "", no funciona. Y también textbox.text = Null, aparece un error diciéndome que el cuadro de texto no está activo ... Muy extraño.

+1

No necesita la propiedad .Value en este caso, ya que es la propiedad predeterminada de los controles. 'Si IsNull (Me! Textbox) Then' debería ser suficiente (o, si ha vinculado el control a un campo que permite la cadena malvada de longitud cero, necesitaría probar la longitud del valor del control concatenado con una cadena vacía , 'Si Len (Me! Textbox & vbNullString) = 0 Then' - pero solo estoy repitiendo lo que todos han dicho, ausente la propiedad explícita .Value. –

Respuesta

47

Null nunca es igual a cualquier cosa, ni siquiera nulo. Use la función IsNull().

If IsNull(Me.textbox.Value) Then 

Si desea Me.textbox tratados de la misma cuando contiene una cadena vacía como cuando es nulo, concatenar una cadena vacía a la misma y comprobar la longitud de la cadena combinada:

If Len(Me.textbox.Value & "") = 0 Then 

Usted también podría usar la constante con nombre, vbNullString, en lugar de la cadena literal, "", para una cadena vacía.

If Len(Me.textbox.Value & vbNullString) = 0 Then 

El uso de la cadena literal requiere que VBA construya esa cadena desde cero cada vez. Con la constante nombrada, VBA solo necesita hacer referencia a ella, por lo que debería ser más rápido y usar menos memoria. Sin embargo, en muchos casos (probablemente la mayoría), la ventaja de rendimiento con vbNullString sería tan pequeña que no notaría la diferencia. También vea el comment below de David-W-Fenton.

Para mí, la razón más convincente para usar vbNullString es que es instantáneamente reconocible para mis ojos envejecidos. Por el contrario, con el literal de cadena, tarda (un poco) más tiempo para confirmar que "" no es realmente otra cosa ... como " " o "'". El único inconveniente con vbNullString, IMO, es que requiere más tipeo que "".

Y, por último, aunque en realidad no necesita hacer referencia explícita a la propiedad Value (ya que es la propiedad predeterminada de un cuadro de texto), la dejé porque la tenía así y porque prefiero ser explícito con Value, también. :-)

+0

Gracias .. Lo entiendo .. – darkjh

+8

En el código VBA, debe tener el hábito de usar la constante llamada 'vbNullString' en lugar de una cadena vacía, es decir," ", porque la memoria porque la constante nombrada ya está asignada. Esto no importa en la mayoría de los casos, pero en un bucle podría ser así, por lo que acostumbrarse asegura que lo hará bien cuando importa. –

+0

@ David-W-Fenton: Gracias para consejos !! – darkjh

0

Creo que es posible que necesite comprobar "", la cadena vacía, y no nulo.

1

Expandir su sub modo:

If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then 
    Exit Sub 
End if 
+0

No ... no funciona ... – darkjh

1

nulo no es igual a otro nulo;)

tratar Si isNull (Me.textbox.Value) Entonces

+0

Ahhh No lo hice t ver su respuesta. Gracias de todos modos – darkjh

0

No pude hacer que esto funcionara, ya que estaba usando el evento KeyUP. Entonces, en cambio, esto es lo que funcionó para mí.

If(Textbox.Text = '') 
    ... 

Desde Textbox.Value sólo las actualizaciones sobre los eventos de cambio, que era no haber actualizado en keyup, por lo TextBox.Text es lo que está actualmente en el cuadro.

Resumen: Como alternativa, utilice la propiedad .Texto

2

me disculpo si estoy despertando a los muertos, pero sólo por el bien integridad voy a dar el código para how to test for spaces (visibly 'blank/empty') as well:

If IsNull(Me.Textbox) Or Trim(Me.Textbox) = vbNullString Then 
If Trim(Me.Textbox & vbNullString) = vbNullString Then 'Shorter version 
If Len(Trim(Me.Textbox) & vbNullString) = 0 Then 'Shortest version 

Vine aquí buscando cómo manejar espacios, vacío/ZLS, & NULL

2

También me disculpo por estoy despertando a los muertos, pero me pregunto que nadie ha considerado el uso de la función Nz (verlo @MSDN), muy popular en VBA, también utilizable en Access/SQL y en mi opinión la solución más conveniente, concisa y poderosa para valores anulables en expresiones.

0

¡Solo use un segundo criterio, eso funcionará!
En este caso, solo una palabra simple como "verificar".

If Forms![Basic]![Table.Item] & "check" = "check" Then 

MsgBox "Field Empty" 

Else 

MsgBox "Field Not Empty" 

End If 
+0

¡Formatee su respuesta! –

Cuestiones relacionadas