Почему, если не IsEmpty, не отфильтровывает пустые строки?

что случилось с моим If состоянии?

If Not IsEmpty(Wrkgps_L3) And Not IsEmpty(Wrkgps_L4) Then
    Wrkgps_L3L4 = Wrkgps_L3 & "," & Wrkgps_L4
End If

на Not условие, похоже, не работает. Код в If утверждение выполняется, даже если оба Wrkgps_L3 и Wrkgps_L4 пустые строки.

обновление:

Wrkgps_L3 и Wrkgps_L4 - переменные, содержащие результаты, возвращаемые функцией. Я заметил это IsEmpty(Wrkgps_L3) = False хотя Wrkgps_L3 = "". Мне пришлось переписать код на

If (Wrkgps_L3 <> "") And (Wrkgps_L4 <> "") Then

в любом случае, я все еще интересно узнать, почему IsEmpty не работает с переменными с ""?

2 ответов


В Visual Basic,Empty и "" (пустая строка) - это две разные вещи. Empty является неинициализированным состоянием Variant переменной, и IsEmpty проверяет, является ли Variant переменная имеет Empty значение:

Dim x As Variant
If IsEmpty(x) Then
    Debug.Print "x is empty"
End If

как вы заметили, вы должны сравнить с "" при проверке, является ли String переменная содержит пустую строку.


если переменные являются строками, вы также можете:

If Len(Wrkgps_L3) + Len(Wrkgps_L4) = 0 Then
   ' They're both empty string variables
Else
   ' One or the other contains at least one character
End If