Senipah / VBA-Better-Array

An array class for VBA providing features found in more modern languages
MIT License
112 stars 18 forks source link

Handle multiarea ranges with FromExcelRange #16

Open JohnGurin opened 3 years ago

JohnGurin commented 3 years ago
Sub Currently()
    Dim ws As Worksheet
    Set ws = Sheet1
        ws.UsedRange.Clear

    Dim multiArea As Range
    Set multiArea = ws.Range("A1:B2, A3, B5:D5")
        multiArea.Value2 = 1

    Dim ba As New BetterArray
        ba.FromExcelRange multiArea
        ba.ToExcelRange ws.[F1] ' fills only A1:B2 area
End Sub

Sub FeatureRequest()
    Dim ws As Worksheet
    Set ws = Sheet1
        ws.UsedRange.Clear

    Dim multiArea As Range
    Set multiArea = ws.Range("A1:B2, A3, B5:D5")
        multiArea.Value2 = 1

    Dim ba As New BetterArray

    ' Loops through rows of every area in a range
    ' and pushes row values as an array to BetterArray instance
    Dim area As Range, row As Range, i As Long, arr() As Variant
    For Each area In multiArea.Areas
        For Each row In area.rows
            If row.Cells.Count = 1 Then
                arr = Array(row.Value2)
            Else
                ReDim arr(1 To row.Cells.Count)
                For i = 1 To row.Cells.Count
                    arr(i) = row.Value2(1, i)
                Next
            End If
            ba.Push arr
        Next
    Next
    ba.ToExcelRange ws.[F1]
End Sub
JohnGurin commented 3 years ago

And even maybe to add a function PushFromExcelRange, which will work like FromExcelRange but will keep previous data