VBA中如何判断数组为空

161 篇文章 16 订阅
56 篇文章 4 订阅

在复杂的代码开发过程中,程序逻辑结构可能存在多个分支,使用变量时,可能需要判断变量是否为空,例如对于Range变量,可以使用如下代码。

Sub RangeDemo()
    Dim rngAll As Range
    Dim rng1 As Range
    Set rng1 = [a1:b3]
    If rngAll Is Nothing Then
        Set rngAll = rng1
    Else
        Set rngAll = Union(rngAll, rng1)
    End If
End Sub

【代码解析】
第5行代码使用Is Nothing判断Range对象变量rngAll是否为空。
如果为空,那么第6行代码使用Set关键字为对象变量赋值。
如果不为空,那么第7行代码使用Union函数合并单元格区域。
rngAll为空时,使用Union函数合并单元格区域,将产生错误号5的运行时错误。
在这里插入图片描述

但是Is Nothing仅适用于对象变量,无法判断普通变量和数组变量,有的同学知道VBA中有IsEmpty函数,从名字看似乎就是为此而生的,咱们测试一下。

Sub demo1()
    Dim a() As Integer
    Dim b() As Variant
    Dim d As Integer
    Dim e As Variant    
    If IsEmpty(a) Then Debug.Print "整数数组a为空"
    If IsEmpty(b) Then Debug.Print "变体数组b为空"
    If IsEmpty(c) Then Debug.Print "未声明变量c为空"
    If IsEmpty(d) Then Debug.Print "整数变量d为空"
    If IsEmpty(e) Then Debug.Print "变体变量e为空"    
    c = 1
    e = 2
    If IsEmpty(c) Then Debug.Print "未声明变量为空" Else Debug.Print "c不为空"
    If IsEmpty(e) Then Debug.Print "变体变量为空" Else Debug.Print "e不为空"
End Sub

【代码解析】
代码非常简单,用于测试不同变量的结果,输出结果如下。
在这里插入图片描述

IsEmpty函数仅适用于变体变量(未声明的变量,默认为变体变量),对于变体数组也不适用。第11至12行代码赋值后,第13至14行代码可以检测到变量不为空。


那么到底如何判断数组是否为空呢?其实也不复杂,

Sub demo2()
    Dim a() As Integer
    On Error Resume Next
    LB = LBound(a)
    If Err.Number = 9 Then
        Debug.Print "数组为空"
    Else
        Debug.Print "数组不为空"
    End If
    On Error GoTo 0
End Sub

【代码解析】
第3行代码忽略运行时错误继续代码执行。
第4行代码使用LBound函数读取变量的下标下界。
如果数组为空,那么将产生错误号为9的运行时错误,第5行代码捕获错误,输出提示信息。
第10行代码恢复系统错误处理机制。

如果使用如下代码声明数组,数组中每个元素的值都为零,因此数组不为空。

Sub demo3()
    Dim a(1 To 2) As Integer
    On Error Resume Next
    LB = LBound(a)
    If Err.Number = 9 Then
        Debug.Print "数组为空"
    Else
        Debug.Print "数组不为空"
    End If
    On Error GoTo 0
End Sub
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值