【问题标题】:Not able to create array from 1 cell range in VBA无法从 VBA 中的 1 个单元格范围创建数组
【发布时间】:2017-01-31 14:48:52
【问题描述】:

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

为了简化问题,请考虑以下范围 (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

即使范围只有一个元素,如何确保创建数组?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您需要检查要转换为数组的 Range 中有多少个单元格,请使用 If r2.Cells.Count > 1 Then

    代码

    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
    

    【讨论】:

      猜你喜欢
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多