VBA:如何测试字符串是否为空

die*_*rin 4 vba requirements word-vba

我在VBA中还很陌生,我还没有完全习惯语法,所以对我的问题听起来很愚蠢感到抱歉。

我正在Word 2010中使用RequisitePro40和VBA 7.0。在我的一个模块中,我具有以下循环和If条件:

Dim rqRequirements As ReqPro40.Requirements
Dim rqRequirement As ReqPro40.Requirement
Const eAttrValueLookup_Label = 4
Dim a As Integer
...

For Each vReqKey In rqRequirements
    Set rqRequirement = rqRequirements(vReqKey)

    If rqRequirement.AttrValue("MyAttreName", eAttrValueLookup_Label).text <> Null Then
        a = 1
    End If

    If rqRequirement.AttrValue("MyAttreName", eAttrValueLookup_Label).text = Null Then
         a = 2
    End If

 Next
Run Code Online (Sandbox Code Playgroud)

在循环的每次迭代中,将同时执行a = 1a = 2

基于,相等和不相等运算符为“ =”和“ <>”。因此,我希望为字符串执行a = 1a = 2。我的语法有问题吗?还是ReqPro相关问题?

我也尝试使用“ Is”和“ IsNot”运算符,但它们导致编译器错误:类型不匹配

有人可以帮我弄这个吗?

更新:实际目标是查看

rqRequirement.AttrValue(“ MyAttreName”,eAttrValueLookup_Label).text

是否为Null。我添加了第二个if,以表明该语句无法按我期望的方式工作。

将“ Null”替换为“ vbNullString”没有进行任何更改。

我还尝试了@Slai建议的IsNull函数。结果几乎相同:

    If IsNull(rqRequirement.AttrValue(att, eAttrValueLookup_Label).text) Then
        a = 3
    End If

    If Not IsNull(rqRequirement.AttrValue(att, eAttrValueLookup_Label).text) Then
        a = 4
    End If
Run Code Online (Sandbox Code Playgroud)

语句a = 3a = 4都是正确的并已执行。

Cin*_*ter 5

VBA不支持测试字符串是否为“ Null”。VBA与.NET语言或JavaScript不同(例如)。基本变量类型都具有默认值,""从声明变量起,字符串的长度为零()-它没有未实例化的状态。您也可以测试vbNullString。

如果你测试

Dim s as String
Debug.Print s = Null, s <> Null, s = "", s = "a", IsNull(s), s = vbNullString
Run Code Online (Sandbox Code Playgroud)

回报是

Null  Null  True  False  False  True
Run Code Online (Sandbox Code Playgroud)

因此,如果您要尝试测试是否已将任何内容分配给String变量,则只能执行以下操作:

Debug.Print Len(s), s = "", Len(s) = 0, s = vbNullString
Run Code Online (Sandbox Code Playgroud)

哪个返回

0  True  True True
Run Code Online (Sandbox Code Playgroud)

请注意,这些可能性中最慢的是s = "",尽管看起来最简单。