在vba中将一个数组分配给另一个数组

时间:2017-11-01 13:10:13

标签: arrays excel vba

在我的项目中,我经常使用数组,我想找到一种方法将一个函数(即数组)的返回值赋给另一个新声明的数组。我搜索并找到了一种方法,它表明我拆分数组并将其重新加入另一个数组,但我希望有一种更精确的方法来处理这个要求...... 假设将返回值的函数:

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

我非常感谢你的真诚帮助。

2 个答案:

答案 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(),但如果您尝试返回空值(例如vbNullStringEmpty),则会导致问题。

    < / LI>

因此,您的代码应为:

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在他的回答中所说,您的数组可以使用预定义的维度进行实例化,并且您可以将值硬编码到数组中。这肯定取决于您的应用程序,但您需要阅读有关数组的文档,以了解创建它们的不同用法和方法。