假设我在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
方法的数组,而不必循环遍历它们并构建我自己的数组,如果可能的话。
答案 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 myElements
或Dim myElements as Variant
或Dim myElements() as String
来解决问题。
以下是其中每一个都有效的原因:
Dim myElements
和Dim myElements as Variant
这两个意味着您将myElements声明为Variant。变体是特殊类型,可以接受任何东西。因此,他们可以轻松接受array of strings
。但是,变体具有大量内存开销,应尽可能避免使用。
Dim myElements() as String
这意味着您将myElements声明为字符串数组。由于这与Split
函数返回的类型相同,因此可以接受。
理想情况下,如果您知道函数的返回类型,则应为变量指定正确的类型。
所以在这种情况下,Dim myElements() as String
是Split
函数返回的相同类型。