Varient数据类型将值0更改为空或空白

Bra*_*ain 2 excel vba excel-vba word-vba

我在下面的代码中传递值0

Dim searchtext As Varient

Public Sub xyz_page_load()
    searchtext = 0
If searchtext = "" Or searchtext = Empty Then
   Debug.Print "Error" 'this line should not execute.
Else
    Debug.Print "Good"
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

它不应该进入"错误"代码行.任何人都可以让我知道为什么会这样吗?为什么varient数据类型将0视为空或空白?

Dmi*_*liv 5

Empty等于比较类型的默认值.

Integer类型Empty将是0:

MsgBox 0 = Empty ' returns True
MsgBox CInt(Empty) ' returns 0
Run Code Online (Sandbox Code Playgroud)

对于String类型Empty将是空字符串"":

MsgBox "" = Empty ' returns True
MsgBox CStr(Empty) ' returns ""
Run Code Online (Sandbox Code Playgroud)

对于Boolean类型Empty将是False:

MsgBox False = Empty ' returns True
MsgBox CBool(Empty) ' returns False
Run Code Online (Sandbox Code Playgroud)

由于您正在使用Dim searchtext As Variant,变量searchtext可以存储任何类型的值,但是当您分配0给变量时:searchtext = 0,键入becames Variant / Integer:

在此输入图像描述

Empty这种类型的0.这就是为什么searchtext = Empty评估为Truesearchtext = 0