2016-10-04 121 views
0

我想在一个变量中设置所有命名范围并导出为PDF。我可以手动输入所有命名的范围。我的问题是命名的范围是可变的,有时它会有一个时间,它会超过10个。请建议...我尝试了以下代码。vba excel set动态命名范围

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 
+0

你设置'昏暗n名称作为Name'但你行,你'设置RS = wbBook.Range(nNames)',** ** nNames代替** n名称** –

+1

真的'设置RS = wbBook.Range(“Page_1,Page_2,Page_3”)有效吗? – user3598756

+0

是的,这对我很有用,并且在单个PDF文件中给出了三页输出结果。 – Manish

回答

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 
+1

这假设所有_workbook_命名范围驻留在同一个工作表中,否则'Union()'将出错。 – user3598756

+0

@ user3598756是的,我已经提到过了。我认为它们全都在同一张表格中,否则OP的原始代码将离解决方案很远。 – vacip

+0

你是对的:我只看着你的代码,并没有看到最初的_caveat_。至于OP的初始代码,以及'wbBook.Range'是我称之为“非常远离解决方案”的开始... – user3598756