vba excel设置动态命名范围

时间:2016-10-04 06:24:14

标签: excel vba excel-vba

我想在一个变量中设置所有命名范围并导出为PDF。当我手动输入所有命名范围时,我能够做到。我的问题是命名范围是可变的,有时它将有一个时间它将超过10.请建议...我尝试使用以下代码。

Dim wbBook As Workbook
Dim nName As Name

Set wbBook = ActiveWorkbook
Set nName=wbBook.Names

Set rs = wbBook.Range(nNames)
rs.Select
Selection.ExportAsFixedFormat xlTypePDF, strPath, , , False

但是当我手动输入范围名称时,下面的代码对我有用..

Set rs = wbBook.Range("Page_1,Page_2,Page_3")
rs.Select
Selection.ExportAsFixedFormat xlTypePDF, strPath, , , False

1 个答案:

答案 0 :(得分:4)

您无法将集合(许多对象)传递给对象变量(单个对象)。您需要遍历集合的对象。通常我们使用For Each循环执行此操作,但在这种情况下,由于Union我需要单独设置第一个元素,因此我使用了一个简单的For循环。

另外,如果可以,请避免使用.Select。只需直接使用您的对象。

另请注意,您正在讨论工作簿中的所有命名范围,如果您在多个工作表中命名了范围,这可能会导致问题。我没有经过测试,但我怀疑它会起作用。

Dim wbBook As Workbook
Dim i As Integer
Dim rs As Range

Set wbBook = ActiveWorkbook
Set rs = wbBook.Names(1).RefersToRange
For i = 2 To wbBook.Names.Count
   Set rs = Union(rs, wbBook.Names(i).RefersToRange)
Next

rs.ExportAsFixedFormat xlTypePDF, strPath, , , False