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. :-)
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. –