VBA - Идентификация пустой строки - PullRequest
0 голосов
/ 15 января 2019

Одна из моих ячеек кажется пустой, но имеет длину 2 символа. Я скопировал строку на этот веб-сайт, и он идентифицировал ее как пустую строку.

Я пытался использовать IsNull и IsEmpty, а также тестировал, чтобы увидеть, эквивалентен ли он vbNullString, но он все еще подходит как False.

Как мне определить эту строку как Null?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Строковое значение, которое «кажется пустым, но имеет длину 2 символа», называется пробел , а не пробел , а не ноль , не пусто .

Используйте функцию Trim (или ее младший брат Trim$ со строковым типом), чтобы удалить начальные / конечные пробельные символы, а затем проверить результат по vbNullString (или ""):

If Trim$(value) = vbNullString Then

Функция Trim не удалит неразрывные пробелы. Вы можете написать функцию, которая делает:

Public Function TrimStripNBSP(ByVal value As String) As String
    TrimStripNBSP = Trim$(Replace(value, Chr$(160), Chr$(32)))
End Function

Это заменяет неразрывные пробелы на ASCII 32 («нормальный» пробел), затем обрезает его и возвращает результат.

Теперь вы можете использовать его для проверки vbNullString (или ""):

If TrimStripNBSP(value) = vbNullString Then

Функция IsEmpty может использоваться только с Variant (в любом случае возвращает только значимый результат, заданный Variant), чтобы определить, содержит ли этот вариант значение.

Функция IsNull имеет чрезвычайно ограниченное использование в VBA, размещенной в Excel, и не должна быть необходима, поскольку на листе Excel ничего не будет Null, особенно строка длиной 2.

0 голосов
/ 15 января 2019

Chr (160) Issue

160 - кодовый номер неразрывного пробела .

Скажем, ячейка А1.

В любой ячейке напишите =CODE(A1), а в другой (например, рядом с) напишите =CODE(MID(A1,2,1)).

Результатами являются кодовые номера (целые числа, например, a и b) символов.

Теперь в VBA вы можете использовать:

If Cells(1, 1) = Chr(a) & Chr(b) Then

End If 

или, например,

If Left(Cells(1, 1), 1) = Chr(160) then

End If
...