Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 无法从VBA中的1个单元格范围创建数组_Excel_Vba - Fatal编程技术网

Excel 无法从VBA中的1个单元格范围创建数组

Excel 无法从VBA中的1个单元格范围创建数组,excel,vba,Excel,Vba,我有读取范围并将其转换为数组进行处理的代码。 不幸的是,当范围只有一个单元格时,它失败了 为了解决这个问题,考虑下面的范围(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 =

我有读取范围并将其转换为数组进行处理的代码。 不幸的是,当范围只有一个单元格时,它失败了

为了解决这个问题,考虑下面的范围(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

如何确保即使区域只有一个元素,也会创建数组?

您需要检查区域中有多少个单元格正试图转换为数组,如果r2.cells.Count>1,请使用
,然后使用

代码

Option Explicit

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")
    If r2.Cells.Count > 1 Then
        a2 = r2 ' Creates Variant(1 to 2, 1 to 1)
    Else
        ReDim a2(0 To r2.Cells.Count - 1) ' redim array size to 1 (only 1 cell in range)
        a2(0) = r2
    End If

    Set r1 = Worksheets("test").Range("A1")
    If r1.Cells.Count > 1 Then
        a1 = r1 'Fails with a type mismatch
    Else
        ReDim a1(0 To r1.Cells.Count - 1) ' redim array size to 1 (only 1 cell in range)
        a1(0) = r1
    End If

End Sub