Jos*_*shG 11 arrays excel vba excel-vba
我很困惑为什么我不能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
Run Code Online (Sandbox Code Playgroud)
aev*_*nko 18
将cookie转换为brettdj,因为调整一维阵列的大小并填充它是最好的方法(最快)但我想提供一个更不为人知的紧凑型解决方案,如果你不打算在长阵列上使用它.它不如一维方法快,但不像连接一样慢,但是当你想要快速编写代码时更方便(更容易不用单行编写错别字)!
myArray = Range("B2:B10").value
myString = Join(WorksheetFunction.Transpose(myArray), ", ")
Run Code Online (Sandbox Code Playgroud)
甚至只是:
myString = Join(WorksheetFunction.Transpose(Range("B2:B10").value), ", ")
Run Code Online (Sandbox Code Playgroud)
bre*_*tdj 17
直接从工作表范围创建的变量数组是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
Run Code Online (Sandbox Code Playgroud)