VBA:将Variable Array转换为String

时间:2015-12-10 12:59:44

标签: excel vba excel-vba

我正在尝试使用vba将变量数组转换为字符串。 我尝试了两种方法,但没有它们起作用,它们似乎都在同一点上集中。

    Dim cell As Range
    Dim val As Variant

    For Each cell In Range("packing_list[Code]")
        val = cell.Value
    Next cell

    MsgBox Join(val, "//")

    Dim oSh As Worksheet
    Dim CodeRange As Variant

    Set oSh = ActiveSheet
    CodeRange = oSh.Range("packing_list[Code]").Value

    MsgBox Join(CodeRange , "//")

它们都是MsgBox行上的错误。我做错了什么?

由于

3 个答案:

答案 0 :(得分:5)

您尝试加入的值不是字符串数组。 Join应该在数组上使用

以下是Microsoft说明的链接:https://msdn.microsoft.com/en-us/library/b65z3h4h%28v=vs.90%29.aspx

他们的例子是:

Dim TestItem() As String = {"Pickle", "Pineapple", "Papaya"}
Dim TestShoppingList As String = Join(TestItem, ", ")

您的代码应该类似于:

Dim i As Integer
Dim cell As Range
Dim val() As Variant '() indicate it is an array

i = 0
For Each cell In Range("packing_list[Code]")
    ReDim Preserve val(0 to i) As Variant 'must resize array to fit number of items
    val(i) = cell.Value 'i is the position of the item in the array
    i = i + 1 'increment i to move to next position
Next cell

'Now that you have an array of values (i.e. ("String1", "String2", ...) instead of just "String" you can:

MsgBox Join(val, "//")

答案 1 :(得分:4)

Tranpose可用于为单个列或行生成一维数组或字符串。

因此对A1:A10你只能使用

MsgBox Join(Application.Transpose([a1:a10]), ",")

要处理一行,您需要第二行Transpose,因此适用于A1:K1

MsgBox Join(Application.Transpose(Application.Transpose([a1:k1])), ",")

答案 2 :(得分:0)

看起来你认为你的valCodeRange变量是数组,而事实上它们不是。您已将其声明为Variants,但不是Variant Arrays,我怀疑这是您的目标。添加括号以将变量声明为数组:Dim CodeRange() as Variant

看到这个: How do I declare an array variable in VBA?

正如@Brandon Keck所说,Join正在期待一个数组。