You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 16:25:04