ms access - poner - Cuadro de texto nulo problema
cuadro de texto busqueda access (8)
Creo que es posible que deba volver a marcar "", la cadena vacía, y no Null.
Tengo un cuadro de texto y un botón en mi formulario de acceso. En el evento de clic del botón, quiero ver si el cuadro de texto está vacío, si está, no se ejecutará nada. Entonces yo uso
If Me.textbox.Value = Null Then
Exit Sub
End if
Pero no funciona ... Verifiqué el textbox.value en la ventana de ejecución y es Null, pero la cláusula if simplemente no funciona ... ¿Por qué?
EDITAR: @Dimse, intenté "", no funciona. Y también textbox.text = Null, aparece un error que indica que el cuadro de texto no está activo. Muy extraño.
Expande tu sub como así:
If is null(Me.textbox.Value) Or (Me.textbox.Value = "") Then
Exit Sub
End if
No pude hacer que esto funcionara, ya que estaba usando el evento KeyUP. Así que en cambio, esto es lo que funcionó para mí.
If(Textbox.Text = '''')
...
Como Textbox.Value solo se actualiza en el evento de cambio, no se actualizó en keyup, por lo que Textbox.Text es lo que está actualmente en el cuadro.
Resumen: Alternativamente, use la propiedad .Text
Null no es igual a otro Null;)
intente If isNull (Me.textbox.Value) Then
Null nunca es igual a nada, ni siquiera Null. Utilice la función IsNull()
.
If IsNull(Me.textbox.Value) Then
Si quiere que Me.textbox
tratado de la misma manera cuando contiene una cadena vacía como cuando es Nulo, concatene una cadena vacía y verifique la longitud de la cadena combinada:
If Len(Me.textbox.Value & "") = 0 Then
También puede usar la constante nombrada, 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 mencionada, VBA solo necesita hacer referencia a ella, por lo que debe ser más rápido y usar menos memoria. Sin embargo, en muchos (probablemente la mayoría) de los casos, la ventaja de rendimiento con vbNullString
sería tan pequeña que no notaría la diferencia. También vea el comentario a continuación de David-W-Fenton .
Para mí, la razón más convincente para usar vbNullString
es que es reconocible al instante por mis ojos envejecidos. A la inversa, con la cadena literal, me lleva (un poquito) más tiempo confirmar que ""
no es realmente otra cosa ... como " "
o "''"
. El único inconveniente de vbNullString
, IMO, es que requiere más escritura que ""
.
Y finalmente, aunque no es necesario que haga referencia explícita a la propiedad Value
(ya que es la propiedad predeterminada de un cuadro de texto), la dejé porque la tenía de esa manera y porque también prefiero ser explícita con Value
. :-)
Pido disculpas si estoy despertando a los muertos, pero solo para completar, voy a dar el código de cómo probar los espacios (visiblemente ''en blanco / vacío'') también :
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íos / ZLS, y NULL''s
Solo usa un segundo criterio, eso funcionará !!
En este caso solo una palabra simple como "chequear".
If Forms![Basic]![Table.Item] & "check" = "check" Then
MsgBox "Field Empty"
Else
MsgBox "Field Not Empty"
End If
También me disculpo por estar despertando a los muertos, pero me pregunto que nadie ha considerado el uso de la Función Nz
( @MSDN ), muy popular en VBA, también utilizable en Access / SQL y en mi opinión la más conveniente, Solución concisa y potente para valores anulables en expresiones.