VBA-Better-Array icon indicating copy to clipboard operation
VBA-Better-Array copied to clipboard

Handle multiarea ranges with FromExcelRange

Open JohnGurin opened this issue 4 years ago • 1 comments

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 avatar Jun 01 '21 16:06 JohnGurin

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

JohnGurin avatar Jun 01 '21 17:06 JohnGurin