Доступ к значению в range.areas (2) - PullRequest
1 голос
/ 26 сентября 2019

Я сохраняю диапазон в массив в VBA.Работает нормально, если у меня нет нескольких областей в диапазоне, тогда только первая область преобразуется в массив, а вторая область полностью игнорируется.Когда я смотрю на окно Locals, я могу найти значения диапазона в разделе Item 2 области Areas объекта range.Должен быть способ получить доступ к этим данным!

Я пытался объединить две области диапазона, но в результате все равно остается диапазон с областями и не работает, когда я применяю его кмассив.Я пытался получить доступ к этим значениям в разделе «Элемент 2» объекта диапазона, но не могу понять, как их достичь.

    Sub Main()
    Dim InputRange As Range

    Set InputRange = Union(Sheets("VialHelper").Range("H91:GY94"), 
    Sheets("VialHelper").Range("H145:GY145"))
    Call ArrayBuilder(AwesomeArr(), InputRange)

    End Sub



    Sub ArrayBuilder(ByRef finArray() As Variant, RangeArr As Range)

    Dim tempArray As Variant
    Dim i As Integer, j As Integer, counter As Integer
    Dim area As Range

    counter = 1
    tempArray = RangeArr 'HERE IS WHERE I NEED THE SECOND AREA TO BE ADDED TO THE ARRAY


    ReDim finArray(1 To 2)
    For i = LBound(tempArray, 1) To UBound(tempArray, 1)
        For j = LBound(tempArray, 2) To UBound(tempArray, 2)
            If Left(tempArray(i, j), 2) = "L0" Or Left(tempArray(i, j), 2) = "R0" Then
                ReDim Preserve finArray(1 To counter)
                finArray(counter) = tempArray(i, j)
                counter = counter + 1
            End If
        Next j
    Next i


    End Sub

Я ожидаю увидеть все значения из областей, определенных в диапазоне, которые будутв переменной tempArray.Но я вижу только значения из области 1.

Очень ценится!

1 Ответ

2 голосов
/ 26 сентября 2019

Вам нужно перебрать области так или иначе.

Возможно, что-то вроде этого:

Sub ArrayBuilder(ByRef finArray() As Variant, ByVal RangeArr As Range)

    Dim tempArray() As Variant
    Dim i As Long, j As Long, counter As Long

    counter = 1
    ReDim finArray(1 To 2) ' not sure why you do this

    Dim area As Range
    For Each area In RangeArr.Areas
        If area.Count = 1 Then
            ReDim tempArray(1 To 1, 1 To 1)
            tempArray(1, 1) = area.Value
        Else
            tempArray = area.Value
        End If

        For i = LBound(tempArray, 1) To UBound(tempArray, 1)
            For j = LBound(tempArray, 2) To UBound(tempArray, 2)
                If Left(tempArray(i, j), 2) = "L0" Or Left(tempArray(i, j), 2) = "R0" Then
                    ReDim Preserve finArray(1 To counter)
                    finArray(counter) = tempArray(i, j)
                    counter = counter + 1
                End If
            Next j
        Next i
    Next area

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...