联合(范围)值失败vba

时间:2015-08-05 15:39:06

标签: excel vba

我试图将数组设置为非连续数组的值。

我的代码

With WBInfoProduit.Sheets(1)
Set myrange = Union(ActiveSheet.Range(Cells(1, ProdNameCol), Cells(rows, ProdNameCol)), ActiveSheet.Range(Cells(1, FundNameCol), Cells(rows, FundNameCol)), ActiveSheet.Range(Cells(1, CompagnieCol), Cells(rows, CompagnieCol)))

结束 所以这个数组有3列,但是当我用debbuger检查时它只有2列。

谢谢你们。

1 个答案:

答案 0 :(得分:1)

有几件事。你的代码

    With WBInfoProduit.Sheets(1)
        Set myrange = Union( _
                  ActiveSheet.Range(Cells(1, ProdNameCol), Cells(Rows, ProdNameCol)) _
                , ActiveSheet.Range(Cells(1, FundNameCol), Cells(Rows, FundNameCol)) _
                , ActiveSheet.Range(Cells(1, CompagnieCol), Cells(Rows, CompagnieCol)) _
                )
    End With

请注意每个"细胞"指的是活动表上的单元格。 所以

使用WBInfoProduit.Sheets(1)

什么都不做!

我试过了:

Sub xxx()


    Dim myrange As Range

    With ActiveSheet
        Set myrange = Union( _
                  .Range(.Cells(1,  5), .Cells(100,  5)) _
                , .Range(.Cells(1, 10), .Cells(100, 10)) _
                , .Range(.Cells(1, 20), .Cells(100, 20)) _
                )
    End With

    Debug.Print myrange.Address

End Sub

导致此输出

 $E$1:$E$100,$J$1:$J$100,$T$1:$T$100

因此,只要您的代码中的ProdNameCol,FundNameCol,CompagnieCol设置为不同的值,它应该可以工作,但可能只在活动工作表上。

然而,

如果您尝试为阵列分配范围,则需要了解范围区域!

请参阅下面的代码,这将有助于

Sub xxx()


    Dim myrange As Range
    Dim MyArray() As Variant

    Dim MyArray1() As Variant
    Dim MyArray2() As Variant
    Dim MyArray3() As Variant
    Dim MyArray4() As Variant

    With ActiveSheet
        Set myrange = Union( _
                  .Range(.Cells(1,  5), .Cells(100,  5)) _
                , .Range(.Cells(1, 10), .Cells(100, 10)) _
                , .Range(.Cells(1, 20), .Cells(100, 20)) _
                )
    End With


    Debug.Print myrange.Address
    Debug.Print myrange.Areas(1).Address
    Debug.Print myrange.Areas(2).Address
    Debug.Print myrange.Areas(3).Address

    MyArray = myrange
    MyArray1 = myrange.Areas(1)
    MyArray2 = myrange.Areas(2)
    MyArray3 = myrange.Areas(3)


    ' MyArray4 = Union(MyArray1, MyArray2, MyArray3)

End Sub

MyArray4系列将无法使用here获取帮助!