VBA数组动态下标下界

56 篇文章 4 订阅
10 篇文章 0 订阅
本文探讨了VBA中数组下标默认从零还是从一开始的问题,并展示了如何在函数中根据OptionBase设置动态调整数组下标。通过实例代码解释了如何利用LBound函数获取数组下标的默认值,确保返回的数组下标与OptionBase设置保持一致。
摘要由CSDN通过智能技术生成

VBA中数组默认下标下界为从零开始,有些同学喜欢下标下界从一开始,这只是编程习惯不同,无对错之分。

现有一个VBA自定义函数,参数为下标上界,函数返回值为一维数组,代码较简单,不再逐句讲解。

Option Base 1
Function GetArr(intCnt As Integer) As Variant
    Dim intInd As Integer
    Dim arrRes()
    intInd = 0
    ReDim arrRes(intInd To intCnt)
    For i = intInd To intCnt
        arrRes(i) = i
    Next
    GetArr = arrRes()
End Function
Sub Demo()
    Debug.Print Join(GetArr(4))
End Sub

运行Demo过程输出结果如下。

0 1 2 3 4

大家是否注意到了,第一行代码指定数组下标下届从1开始,但是函数GetArr中数组下标下界是由变量intInd决定的,此变量的值是Hard Code。

实例需求:自定义函数返回值为数组,该数组的下标下届是否可以和Option Base设置保持一致。

有的同学想到一个方法,在VBA中读取代码模块,然后就可以知道Option Base设置下界值,如果没有这行代码,那么下界值为零。这不失为一个方法,但是局限性很大,用户必须要启用“信任对VBA工程对象模型的访问”,否则无法使用。

其实不妨换个思路,既然是和Option Base设置保持一致,那么可以取巧的使用检测数组下标下届的方法得到这个设置。

实例代码如下。

Option Base 1
Function GetArr1(intCnt As Integer) As Variant
    Dim intInd As Integer
    Dim arrRes(), tmp(1)
    intInd = LBound(tmp)
    ReDim arrRes(intInd To intCnt)
    For i = intInd To intCnt
        arrRes(i) = i
    Next
    GetArr1 = arrRes()
End Function
Sub demo1()
    Debug.Print Join(GetArr1(4))
End Sub

【代码解析】
自定义函数主要部分同前,区别在于第4行代码声明了一个临时数组变量tmp(),第5行代码使用LBound函数获取数组下标下界,无论当前模块种是否包含Option Base语句,都可以快速的获取下界值。

运行Demo过程输出结果如下。

1 2 3 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值