繁体   English   中英

无法使用联合将范围加入VBA中的数组

[英]Can't join ranges into array in VBA using Union

我有两个要加入的命名范围,即将第二个范围附加到数组中第一个范围的末尾。 当我使用Union我只会得到数组中的第一个范围。 如果我只使用Range它可以工作,但不能加入非连续范围。

Sub GetAbilities()
Dim Arr() As Variant   
Dim rng1 As Range
Dim rng2 As Range
Dim newRng As Range

Set rng1 = tbl.ListColumns("Ability1").DataBodyRange
Set rng2 = tbl.ListColumns("Ability2").DataBodyRange
Set newRng = Union(rng1, rng2)

'   Set newRng = Range(rng1, rng2)
'   This works fine

Arr = newRng

Dim Destination As Range
Set Destination = Sheets("test").Range("A1")
Destination.Resize(UBound(Arr, 1), UBound(Arr, 2)).Value = Arr

End Sub

我认为您只是将两列彼此堆叠,因此可以如下循环:

Option Explicit

Sub Test()

    Dim Arr() As Variant
    Dim tbl As ListObject

    Set tbl = ThisWorkbook.Worksheets("Sheet4").ListObjects("Table1") 'this would be set as per your requirements
    Dim totalOutputRows As Long
    Dim totalColumnRows As Long

    totalColumnRows = tbl.DataBodyRange.Rows.Count
    totalOutputRows = totalColumnRows * 2

    ReDim Arr(1 To totalOutputRows)
    Dim i As Long
    Dim j As Long

    For i = 1 To totalOutputRows

        If i <= totalColumnRows Then

            Arr(i) = tbl.ListColumns("Ability1").DataBodyRange(i, 1)

        Else

            j = j + 1
            Arr(i) = tbl.ListColumns("Ability2").DataBodyRange(j, 1)

        End If

    Next i

End Sub

您也可以摆脱j并放进去

Arr(i) = tbl.ListColumns("Ability2").DataBodyRange(i - totalColumnRows, 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM