2015-04-21 48 views
0

我試圖從一個模板文件複製一堆工作表到一個新的文件,但這是導致公式引用原始模板 - 所以我看到在線,我應該使用一個數組 - 但現在出現「下標超出範圍」錯誤。我在做什麼錯了 - 它在最後一行的錯誤?另外我試過ws()作爲字符串,也沒有工作。複製工作表陣列vba

Dim templateworkbookname As string 
templateworkbookname="test.xlsx" 
Dim ws() As Variant 
     Dim j As Integer 
     ReDim ws(Workbooks(templateworkbookname).Worksheets.Count) 
     For j = 1 To Workbooks(templateworkbookname).Worksheets.Count 
       ws(j) = Workbooks(templateworkbookname).Worksheets(j).Name 
     Next 
     Set newbook = Workbooks.Add 
     Workbooks(templateworkbookname).Worksheets(ws).Copy Before:=newbook.Sheets(1) 
+0

這是你的完整碼?它看起來像'templateworkbookname'沒有被定義,這會引發'下標超出範圍'的錯誤。 – Soulfire

+0

不,它不是完整的代碼,但它被定義(現在編輯它) –

+0

s/defined/** assigned **。這應該是一個'字符串',而不是'變體'。 –

回答

0

我改變了一下你的代碼,因爲這看起來像你想要完成的。如果您打開了一個新的空白工作簿,那麼這將打開test.xlsx,然後複製到工作表中,然後關閉工作簿,空白工作簿現在將包含來自test.xlsx的3個工作表。請注意,我必須提供到test.xlsx的完整路徑,以便它可以找到它。

Set currentworkbook = ActiveSheet 
Dim templateworkbookname as String 
templateworkbookname = "c:\test.xlsx" 

Set wb = Workbooks.Open(templateworkbookname) 

Dim ws() As Variant 
Dim j As Integer 
ReDim ws(wb.Worksheets.Count) 
For j = 1 To wb.Worksheets.Count 
    ws(j) = wb.Worksheets(j).Name 
Next 

For j = 1 To UBound(ws) 
    wb.Worksheets(j).Copy Before:=currentworkbook 
Next 

wb.Close 
+0

嗨,謝謝,但我把所有這一切都放在一個循環中多次執行,並且在某些時候這將成爲插件的一部分。所以我需要主宏來調用模板工作簿,然後添加另一個來保存 –