我的一个单元格似乎是空白的,但长度为 2 个字符。 我将字符串复制到此网站,并将其标识为空字符串。
我尝试使用IsNull
和IsEmpty
,以及测试以查看它是否等同于vbNullString
但它仍然显示为False
。
如何识别此字符串是否Null
?
"看似空白但长度为 2 个字符"的字符串值称为空格,而不是空白,不是null,不是空。
使用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
函数在 Excel 托管的 VBA 中的用途极其有限,不需要,因为 Excel 工作表中不会Null
任何内容 - 尤其是长度为 2 的字符串。
Chr(160) 问题
160 是不间断空格的代码号。
假设单元格是 A1。
在任何单元格中写=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