假设我在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方法的数组,而不必遍历它们并构建自己的数组,如果可能的话。

最佳答案

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声明为变量数组”。
Split返回一个字符串数组。因此,不匹配。

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

这就是这些方法都能起作用的原因:


Dim myElementsDim myElements as Variant

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

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


理想情况下,如果您知道函数的返回类型,则应为变量指定正确的类型。
因此,在这种情况下,Dim myElements() as String是与Split函数返回的类型相同的类型。

10-06 06:27