Mat*_*NNZ 2 arrays excel vba excel-vba
假设我有一条路径Range("A1")
,看起来像这样:
/data/apps/server/
Run Code Online (Sandbox Code Playgroud)
我想把这三个元素变成一个变量.我认为Split()
通过分隔符做一个/
我会得到完整的数组:
Dim myElements()
myElements = Split(Range("A1").Value,"/")
'>>> EXPECTED: myElements is [data, apps, servers]
Run Code Online (Sandbox Code Playgroud)
但我实际上得到了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
Run Code Online (Sandbox Code Playgroud)
Split
返回一个String Array
.你可能想看到这个
编辑:我有一种感觉,我可能会将某人与我的解释混淆,所以让我再解释一下.
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
.