VBA中如何判断数组为空

139 篇文章 8 订阅
43 篇文章 1 订阅

在复杂的代码开发过程中,程序逻辑结构可能存在多个分支,使用变量时,可能需要判断变量是否为空,例如对于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
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

taller_2000

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值