2009-09-08 10 views
5

Scenario semplice: un modulo e una casella di testo (non associato), Text1.Modo corretto per verificare se un controllo non associato ha un valore

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

Il codice sopra funziona. L'espressione ""<> Text1 restituisce True se la casella di testo contiene caratteri.

Il contrario non funziona, a prescindere della casella di testo è vuota o non:

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

Può chiarire questo problema?

+0

Si dovrebbe specificare il padre del controllo che stai guardando, cioè, Me Text1!. Rende il codice più leggibile ed evita errori di compilazione. –

risposta

5

La casella di testo è solitamente nullo se non contiene nulla, non è uguale a una stringa di lunghezza zero (""). Spesso può essere meglio usare:

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

Questo sarà vero se la casella di testo contiene spazi, una stringa di lunghezza zero o null.

+0

@Remou, mi piace la parte 'Text1 &" "' È un modo intelligente per * evitare * assegnamenti a valori nulli. Grazie. –

+2

Perché non "Me! Text & vbNullString = vbNullString"? Trim() non ha alcuno scopo, tranne il fatto di trattare una casella di testo con uno o più spazi equivalenti a una casella di testo null. Mentre una casella di testo non associata non può contenere più spazi, una casella di testo associata * può * contenere (anche se non sopravviveranno a una modifica in un controllo di modulo). –

+0

Ritengo che vbNullString non sia un nome particolarmente adatto per una costante che sia una stringa di lunghezza zero, quindi ho pensato che le due forme lo avrebbero reso più chiaro. – Fionnuala

4

In alternativa, ho una piccola funzione che trovo utile per controllare quel genere di cose quando si ha a che fare con vari tipi di variabili e voglio solo sapere se è vuoto.

'-----------------------------------------------------------------------------' 
' 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 

Solo Made a blog post oggi anche a questo proposito.

+0

la tua routine sarà utile. Ottima risposta, grazie. –

1

Io uso sempre lo function Nz (variable, valueIfNull) per verificare questo tipo di cose. Per esempio:

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

O se voglio salvare il valore di una casella di testo a un set di record:

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

Grazie Markus. Non conoscevo quella funzione. –

Problemi correlati