我有一段代码可以读取范围并将其转换为数组进行处理。不幸的是,当范围只有一个单元格时,它会失败。
为了简化这个问题,考虑下面的范围(r1,r2),分别有1个和2个单元格,我想分别转换为数组a1和a2:
Sub ranges_to_arrays()
Dim r1 As Range, r2 as Range
Dim a1() As Variant, a2() as Variant
Set r2 = Worksheets("test").Range("A1:A2")
a2 = r2 ' Creates Variant(1 to 2, 1 to 1)
Set r1 = Worksheets("test").Range("A1")
a1 = r1 'Fails with a type mismatch
End Sub
如何确保即使范围只有一个元素也会创建数组?
3条答案
按热度按时间shyt4zoc1#
你需要检查你的Range中有多少单元格,你想转换成数组,使用
If r2.Cells.Count > 1 Then
。编码
vi4fp9gy2#
如果你以后必须处理一个二维数组(例如,循环遍历值),那么
这样做的第二个好处是,在这两种情况下,LBound都是1,因为将多个单元格转换为数组总是返回LBound为1的数组,而不是0。
0ve6wy6x3#
Excel会根据是否引用单个单元格来更改
.Value
和.Value2
返回的内容。要获得一致的结果,您需要一个 Package 函数