Excel VBA – 向Union方法dynamic提供范围

用户已经定义了要在Excel中打印的命名区域。

我正在将这些范围读入VBA数组中。 有没有办法提供范围名称联盟的方法来设置非连续的打印范围。

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

数组中保存的范围数量可能会有所不同。 我已经尝试循环数组并build立一个stringvariables,但没有成功。

任何帮助,将不胜感激。

您将不得不replace声明中的实际范围名称或对象,但这里是如何使用Unionfunction来设置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