VBA调用带参数函数返回数组后,如何访问数组元素?
如何访问VBA函数返回的数组
要访问函数返回的数组,你可以通过两种常用方式实现:
方式一:用变量接收后逐个访问元素
修改RunMe过程,声明一个Variant类型变量存储函数返回的数组,之后通过索引访问每个元素:
Sub RunMe() Dim resultArr As Variant ' 声明变量存储返回的数组 pathtoexceldoc = sh.Cells(iRow, "A") resultArr = gettotalsandvat(pathtoexceldoc) ' 接收函数返回的数组 ' 提取数组元素并赋值到单元格 sh2.Cells(invbookrow, "E") = resultArr(0) ' 取第一个元素(发票日期) sh2.Cells(invbookrow, "F") = resultArr(1) ' 取第二个元素(总计金额) ' 也可以直接使用元素做其他操作 ' MsgBox "发票日期:" & resultArr(0) & vbCrLf & "总计金额:" & resultArr(1) End Sub Private Function gettotalsandvat(Pathstr As String) As Variant Dim arr(1) As Variant ' ....执行打开工作簿等相关操作(需确保wkBook已正确初始化).... invdate = wkBook.Sheets("Sheet1").Cells(16, "O") arr(0) = invdate Total = wkBook.Sheets("Sheet1").Cells(row, "P").Value arr(1) = Total ' MsgBox arr(0) & ", " & arr(1) ' 验证数组内容 gettotalsandvat = arr ' 返回包含两个元素的数组 End Function
关键说明:
- 必须用
Variant类型变量接收返回的数组,这是VBA中存储数组返回值的标准做法。 - 你定义的数组索引从0开始(
arr(1)表示包含0和1两个元素),所以用resultArr(0)访问日期,resultArr(1)访问总计。
方式二:直接批量写入单元格
如果目标是把数组元素连续写入单元格,可用Resize方法一次性完成,无需额外声明变量:
Sub RunMe() pathtoexceldoc = sh.Cells(iRow, "A") ' 一次性将数组两个元素写入E、F列的同一行 sh2.Cells(invbookrow, "E").Resize(1, 2) = gettotalsandvat(pathtoexceldoc) End Sub
注意事项:
- 确保函数中
wkBook已被正确打开并赋值,否则会触发运行时错误。 - 如果数组元素可能为空,建议添加错误处理逻辑,比如判断
IsEmpty(resultArr(0))避免写入空值。
内容的提问来源于stack exchange,提问作者Charles Cat
相关产品推荐
相关产品推荐

