我很困惑为什么我不能将这个加入数组的msgbox。如果我创建一个带有类型化值的静态数组,但我可以使用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
答案 0 :(得分:18)
将cookie转换为brettdj,因为调整一维阵列的大小并填充它是最好的方法(最快)但是我想提供一个更鲜为人知的紧凑型解决方案,如果你不打算使用它长阵列。它不如一维方法快,但不像连接一样慢,但是当你想要快速编写代码时更方便(更容易不用单行编写错误)!
myArray = Range("B2:B10").value
myString = Join(WorksheetFunction.Transpose(myArray), ", ")
甚至只是:
myString = Join(WorksheetFunction.Transpose(Range("B2:B10").value), ", ")
答案 1 :(得分:16)
直接从工作表范围创建的变量数组是2D(即它有行和列) - Join
需要一维数组。
所以你需要做这样的事情
[更新 将范围读入变量数组,然后将变量数组转换为1D数组以进行连接 - 避免单元格循环]
另请注意,在单个列上使用TRANSPOSE
作为Issun的下方会立即强制执行1D ouctome。因此,另一种方法是循环遍历2D变量数组的列或行,并逐列(或逐行)TRANSPOSE
来快速生成一维数组。
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