2017-01-31 11 views
0

У меня есть код, который читает диапазоны и преобразует их в массивы для обработки. Он, к сожалению, терпит неудачу, когда диапазон имеет только одну ячейку.Не удалось создать массив из 1 диапазона ячеек в 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 = r2 ' Creates Variant(1 to 2, 1 to 1) 

    Set r1 = Worksheets("test").Range("A1") 
    a1 = r1 'Fails with a type mismatch 

End Sub 

Как я могу гарантировать, что массив будет создан, даже если диапазон имеет только один элемент?

ответ

0

Вам нужно проверить, сколько ячеек есть в вашем диапазоне, который вы пытаетесь преобразовать в массив, используйте 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 
Смежные вопросы