Excel VBA - 动态地为Union方法提供范围

时间:2016-01-27 15:38:31

标签: excel vba excel-vba

用户已定义要在Excel中打印的命名范围。

我正在将这些范围读入VBA数组。有没有办法将范围名称提供给Union方法以设置不连续的打印范围。

例如,类似于: ActiveSheet.PageSetup.PrintArea = Union(Range(array(1)), Range(array(2))).Address

阵列中保留的范围数可以变化。我已经尝试循环遍历数组并构建一个字符串变量,但没有成功。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

您必须替换语句中的实际范围名称或对象,但以下是如何使用Union函数设置PrintArea

Sub foo()
    Dim setup As PageSetup
    Set setup = ActiveSheet.PageSetup

    setup.PrintArea = Union(Range("MyRange1"), Range("MyRange2")).Address
End Sub
  

我实际需要的是使用数组中保存的范围名称构造Union语句的方法

好的,然后使用上面的方法和自定义函数在循环中构造Union:

Sub foo()
    Dim setup As PageSetup
    Dim RangeArray(1) As Range

    Set setup = ActiveSheet.PageSetup
    Set RangeArray(0) = Range("MyRange1")
    Set RangeArray(1) = Range("MyRange2")

    setup.PrintArea = GetUnion(RangeArray)
End Sub
Function GetUnion(arr As Variant) As String
    Dim itm As Variant
    Dim ret As Range
    For Each itm In arr
        If Not ret Is Nothing Then
            Set ret = Union(ret, itm)
        Else
            Set ret = itm
        End If
    Next
    If Not ret Is Nothing Then
        GetUnion = ret.Address
    Else
        GetUnion = ""  'May cause an error...
    End If
End Function