简单的VBA数组连接不工作

我很疑惑,为什么我不能msgbox这个连接的数组。 我可以做到这一点,如果我创build一个具有input值的静态数组,但从Excel中的值的范围我一直得到“无效的过程调用或参数”

我做了大量的研究,但是我找不到任何这个问题的例子。 我在这里做错了什么?

Sub From_sheet_make_array() Dim myarray() As Variant Dim dudeString As String myarray() = Range("B2:B10").Value dudeString = Join(myarray(), ", ") MsgBox dudeString End Sub 

直接从工作表范围创build的变体数组是2D(即它有行和列) – Join需要一维数组。

所以你需要做这样的事情

[ 更新 读取范围到不同的数组,然后将不同的数组转换成一维数组join – 避免单元循环 ]

还要注意的是,使用TRANSPOSE作为Issun在下面的单个列上立即强制执行一维操作。 因此,另一种方法是循环遍历2D变体数组的行或列,然后逐行(或逐行)移动它们以快速生成一维数组。

  Sub From_sheet_make_array() Dim X Dim lngRow As Long Dim myArray() X = Range("B2:B10").Value2 ReDim myArray(1 To UBound(X, 1)) For lngRow = 1 To UBound(X, 1) myArray(lngRow) = X(lngRow, 1) Next Dim dudeString As String dudeString = Join(myArray, ", ") MsgBox dudeString End Sub 

该cookie去brettdj调整一维数组的大小和填充它是最好的方式去(最快),但我想提供一个更不为人知的紧凑的解决scheme,你不打算在长arrays上使用这个。 它不像一维方法那样快,但是不像串接那样慢,但是当你想把快速代码写在一起时(更容易不用一行代码)就很方便!

 myArray = Range("B2:B10").value myString = Join(WorksheetFunction.Transpose(myArray), ", ") 

甚至只是:

 myString = Join(WorksheetFunction.Transpose(Range("B2:B10").value), ", ")