将完整的Split数组转换为VBA变量

时间:2015-05-20 10:12:21

标签: arrays vba excel-vba excel

假设我在Range("A1")中有一条看起来像这样的路径:

/data/apps/server/

我想把这三个元素变成一个变量。我认为通过分隔符Split()/我会得到完整的数组:

Dim myElements()
myElements = Split(Range("A1").Value,"/")
'>>> EXPECTED: myElements is [data, apps, servers]

但我确实在Type mismatch行上出现myElements = Split(Range("A1").Value,"/")错误。 Split函数返回什么?它实际上是返回数组还是提供只读访问权限?

我想获取Split方法的数组,而不必循环遍历它们并构建我自己的数组,如果可能的话。

1 个答案:

答案 0 :(得分:5)

Dim elements()更改为Dim elements As Variant

您需要将其声明为Variant。

<强>解释

Excel单元格中的数据可以是任何内容。所以使用Variant。在下面的情况下,您知道它是String,因此将其声明为String

Sub Sample()
    Dim myElements() As String
    Dim myString As String

    myString = "aaa/bbb/ccc"

    myElements = Split(myString, "/")

    Debug.Print myElements(0)
    Debug.Print myElements(1)
    Debug.Print myElements(2)
End Sub

Split返回String Array。您可能希望看到This

编辑:我觉得我可能会将某人与我的解释混淆,所以让我再解释一下。

Dim myElements()表示“将myElements声明为Variants数组”。 Split返回一个字符串数组。因此,不匹配。

您可以执行Dim myElementsDim myElements as VariantDim myElements() as String来解决问题。

以下是其中每一个都有效的原因:

  1. Dim myElementsDim myElements as Variant

    这两个意味着您将myElements声明为Variant。变体是特殊类型,可以接受任何东西。因此,他们可以轻松接受array of strings。但是,变体具有大量内存开销,应尽可能避免使用。

  2. Dim myElements() as String

    这意味着您将myElements声明为字符串数组。由于这与Split函数返回的类型相同,因此可以接受。

  3. 理想情况下,如果您知道函数的返回类型,则应为变量指定正确的类型。 所以在这种情况下,Dim myElements() as StringSplit函数返回的相同类型。