我很困惑为什么我不能将此连接数组发送到 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
cookie 转到 brettdj,因为调整一维数组的大小并填充它是最好的方法(最快),但我想提供一个更鲜为人知的紧凑解决方案,以防您不打算在长数组上使用它。它不像一维方法那么快,但也不像串联那么慢,但是当你想一起编写快速代码时它很方便(更容易避免用单行代码犯错)!
myArray = Range("B2:B10").value
myString = Join(WorksheetFunction.Transpose(myArray), ", ")
甚至只是:
myString = Join(WorksheetFunction.Transpose(Range("B2:B10").value), ", ")
直接从工作表范围创建的变体数组是二维的(即它具有行和列) -
Join
需要一维数组。
所以你需要做这样的事情
[更新 将范围读取到变体数组中,然后将变体数组转换为一维数组以进行连接 - 避免单元循环]
另请注意,使用 Issun 在单列上使用
TRANSPOSE
确实会立即强制生成 1D ouctome。因此,另一种选择是循环遍历 2D 变体数组的列或行,然后逐列(或逐行)遍历它们以快速生成 1D 数组。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
Excel 有时完全疯狂:(