VBA编译错误:无法将函数返回值赋值给数组的问题排查
问题原因及解决方法
错误根源
1. 固定大小数组无法直接整体赋值
你声明的TestArray(1 To 3) As Long是固定大小数组,VBA不允许用=直接给固定大小数组做整体赋值,这就是触发编译错误的直接原因。
2. 函数返回数组的写法错误
TestFunction里直接用TestFunction(1) = Value1这种方式赋值是错误的——返回数组类型的函数,不能直接通过下标给函数名赋值,必须先创建一个数组对象,填充数据后再把这个数组赋值给函数名作为返回值。
修正方案
方案一:改用动态数组接收返回值
把主过程里的固定数组改成动态数组,同时修正函数的写法:
Option Explicit Sub Test() ' 声明动态数组,不指定大小 Dim TestArray() As Long TestArray = TestFunction() ' 可通过Debug.Print验证结果 Debug.Print TestArray(1), TestArray(2), TestArray(3) End Sub Function TestFunction() As Long() Dim Value1 As Long Dim Value2 As Long Dim Value3 As Long ' 替换成你的实际计算逻辑 Value1 = 10 Value2 = 20 Value3 = 30 ' 先创建临时数组并填充数据 Dim tempArr(1 To 3) As Long tempArr(1) = Value1 tempArr(2) = Value2 tempArr(3) = Value3 ' 将临时数组赋值给函数名作为返回值 TestFunction = tempArr End Function
方案二:保留固定大小数组,逐个赋值
如果必须使用固定大小的TestArray,可以在主过程里逐个接收函数返回数组的元素:
Option Explicit Sub Test() Dim TestArray(1 To 3) As Long Dim resultArr() As Long resultArr = TestFunction() ' 逐个给固定数组赋值 TestArray(1) = resultArr(1) TestArray(2) = resultArr(2) TestArray(3) = resultArr(3) End Sub Function TestFunction() As Long() Dim Value1 As Long Dim Value2 As Long Dim Value3 As Long Value1 = 10 Value2 = 20 Value3 = 30 Dim tempArr(1 To 3) As Long tempArr(1) = Value1 tempArr(2) = Value2 tempArr(3) = Value3 TestFunction = tempArr End Function
内容的提问来源于stack exchange,提问作者Jens
相关产品推荐
相关产品推荐

