2016-10-04 237 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