假设我在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 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
函数返回的类型相同的类型。