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

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

Sid*_*out 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
Run Code Online (Sandbox Code Playgroud)

Split返回一个String Array.你可能想看到这个

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

Dim myElements()表示"将myElements声明为变量数组 ". 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函数返回的类型相同,因此可以接受.

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

  • ++当我学习VBA时,希望你是我的老师......大声笑.你会很好地解释一切......免费:D (2认同)