2009-09-08 9 views
5

Escenario simple: un formulario y un cuadro de texto (sin consolidar), Text1.Forma correcta de comprobar si un control independiente tiene un valor

If "" <> Text1 Then 
    MsgBox "Not Empty" 
End If 

El código anterior funciona. La expresión ""<> Text1 se evalúa como Verdadero si el cuadro de texto contiene caracteres.

Lo contrario no funciona, independientemente del cuadro de texto no está vacío o:

If "" = Text1 Then ' or alternatively, False = ("" <> Text1) 
    MsgBox "Empty!" 
End If 

¿Puede aclarar esta cuestión?

+0

realmente se debe especificar la matriz del control que está viendo, es decir, Me Texto1!. Hace que el código sea más legible y evita los errores de compilación. –

Respuesta

5

El cuadro de texto es generalmente nulo si no contiene nada, esto no es lo mismo que una cadena de longitud cero (""). A menudo puede ser mejor usar:

If Trim(Text1 & "") = vbNullString 
    'Empty 

Esto será cierto si el cuadro de texto contiene espacios, una cadena de longitud cero o nulo.

+0

@Remou, me gusta la parte 'Text1 &" "'. Es una forma inteligente de * evitar * asignaciones a valores nulos. Gracias. –

+2

¿Por qué no "Me! Text & vbNullString = vbNullString"? Trim() no sirve para nada, excepto para tratar un cuadro de texto con uno o más espacios como equivalentes a un cuadro de texto nulo. Mientras que un cuadro de texto independiente no puede contener espacios múltiples, un cuadro de texto enlazado * puede * contenerlos (aunque no sobrevivirán a una edición en un control de formulario). –

+0

Siento que vbNullString no es un nombre particularmente bueno para una constante que es una cadena de longitud cero, así que pensé que las dos formas lo aclararían. – Fionnuala

4

Como alternativa, tengo una pequeña función que considero útil para verificar ese tipo de cosas cuando se trata de varios tipos de variables y solo quiero saber si es en blanco.

'-----------------------------------------------------------------------------' 
' True if the argument is Nothing, Null, Empty, Missing or an empty string. ' 
'-----------------------------------------------------------------------------' 
Public Function IsBlank(arg As Variant) As Boolean 
    Select Case VarType(arg) 
     Case vbEmpty 
      IsBlank = True 
     Case vbNull 
      IsBlank = True 
     Case vbString 
      IsBlank = (arg = vbNullString) 
     Case vbObject 
      IsBlank = (arg Is Nothing) 
     Case Else 
      IsBlank = IsMissing(arg) 
     End Select 
End Function 

Just Made a blog post today about it too.

+0

su rutina será útil. Muy buena respuesta, gracias. –

1

Siempre uso el function Nz (variable, valueIfNull) para verificar ese tipo de cosas. Por ejemplo:

if (Len(Nz(Me.txt1, "")) > 0) then 
     'Me.txt1 does not contain a value 
end if 

O si quiero guardar el valor de un cuadro de texto a un conjunto de registros:

rst!Name = Nz(Me.txtName, "No name given") 
+0

Gracias Markus. No conocía esa función. –

Cuestiones relacionadas