在我的项目中,我经常使用数组,我想找到一种方法将一个函数(即数组)的返回值赋给另一个新声明的数组。我搜索并找到了一种方法,它表明我拆分数组并将其重新加入另一个数组,但我希望有一种更精确的方法来处理这个要求...... 假设将返回值的函数:
Public Function GetVariables() As String()
Dim Vars() As String
GetVariables = Vars
End Function
以及使用它的功能:
Public Function popu()
Dim Vars() As String
Set Vars = GetVars()
End Function
但这给了我一个错误:
can not assign to array
我非常感谢你的真诚帮助。
答案 0 :(得分:2)
作为你的函数/ sub的更精细的例子:
Public Function GetVariables() As String()
Dim Vars() As String
ReDim Preserve Vars(2)
Vars(1) = "hello"
Vars(2) = "world"
GetVariables = Vars
End Function
Public Function popu()
Dim Vars() As String
Dim i
Vars = GetVariables()
For i = 1 To UBound(Vars)
Debug.Print Vars(i)
Next i
End Function
打印
hello
world
答案 1 :(得分:2)
你在这里犯了一些错误。首先,正如其他人在评论中指出的那样,Set
是用于分配Object
变量的特殊关键字,因此Set
会在此处导致错误。
接下来,您必须确保正确分配回您的函数调用。目前您的代码:
Public Function popu()
Dim Vars() As String
Set Vars = GetVars()
End Function
做错了四件事。
Vars()
不等于Vars()
。
GetVars()
不等于Public Function GetVariables()
您不应在函数调用中包含空括号。
数组应声明为Variant
。您可以将数组声明为String()
,这会创建一个字符串数组,但通常会避免这种情况。另外,您可以将变量声明为Variant()
,但如果您尝试返回空值(例如vbNullString
或Empty
),则会导致问题。
因此,您的代码应为:
Public Function GetVariables() As Variant
Dim Variables As Variant
GetVariables = Variables
End Function
' Make sure your function has an explicit returntype, even if that return is variant.
Public Function popu() as Variant
Dim Variables As Variant
Variables = GetVariables
End Function
正如Paul在他的回答中所说,您的数组可以使用预定义的维度进行实例化,并且您可以将值硬编码到数组中。这肯定取决于您的应用程序,但您需要阅读有关数组的文档,以了解创建它们的不同用法和方法。