2016-02-19 454 views
0

從工作簿中,我試圖打開另一個工作簿,複製該工作簿中的主工作表並重命名它。問題是,無論我嘗試什麼,似乎都不工作,當我複製主表。Excel VBA - 無法在其他工作簿中複製工作表

嘗試一 - 使用複製方法。

Sub individualStats() 

    'Initialize 
    Dim app As New Excel.Application 
    app.Visible = False 
    Dim objWorkbook As Excel.Workbook 
    Set objWorkbook = app.Workbooks.Add("S:\MH\Stats\Jordan Individual Stats.xlsm") 

    'Test if Worksheet exists already 
    Set wsTest = Nothing 
    On Error Resume Next 
    Set wsTest = objWorkbook.Worksheets("Test Worksheet") 
    On Error GoTo 0 

    'If worksheet does not exist then duplicate Master and rename 
    If wsTest Is Nothing Then 

    objWorkbook.Worksheets("Master").Copy After:=objWorkbook.Worksheets(Worksheets.count) 
    '^This is the line I get the error on. 
    ActiveSheet.Name = "Test Worksheet" 

    End If 

    'Save and close workbook. 
    app.DisplayAlerts = False 

    objWorkbook.SaveAs Filename:="S:\MH\Stats\Jordan Individual Stats.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled 
    objWorkbook.Close SaveChanges:=False 
    app.Quit 
    Set app = Nothing 

    app.DisplayAlerts = True 
End Sub 

我已經標記了行,我得到的錯誤。錯誤是 「運行時錯誤'9':下標超出範圍。」

嘗試兩種 - 調用從工作簿中

裏面我創造了這個宏的「喬丹個人Stats.xlsm」工作簿的宏。

Sub duplicateMaster() 
    Sheets("Master").Copy After:=Sheets(Sheets.Count) 
    ActiveSheet.Name = "Test Worksheet" 

End Sub 

如果我在該工作簿中運行它,則該子工作得很好。

但是,當我嘗試從原始工作簿調用此模塊時,它不起作用。

... 
If wsTest Is Nothing Then 
    Application.Run ("'S:\MH\Stats\Jordan Individual Stats.xlsm'!duplicateMaster") 
End If 
... 

的錯誤出現就行「表(」主機「)的duplicateMaster模塊中的線複製後:=表(Sheets.Count)」。

錯誤是相同的「運行時錯誤'9':下標超出範圍。」

我該如何解決這個問題?

+0

那麼只有兩個可能的失敗,名爲「主」的表不存在,索引「Worksheets.Count」不存在。後者似乎不太可能。將該語句分成兩行,使用debug.print或其他技術,並檢查您正在使用的失敗模式... –

+1

例如,使用:'Debug.Print objWorkbook.Worksheets(「Master」)。Name'並參見如果這會引發錯誤。 –

+0

另請嘗試使用'Open'而不是'Add':'Set objWorkbook = app.Workbooks.Open(...)' –

回答

4
objWorkbook.Worksheets("Master").Copy _ 
    After:=objWorkbook.Worksheets(Worksheets.count) 

這裏Worksheets.count將把活動工作簿,但沒有在Excel的新實例創建。它將在您的代碼正在運行的實例中引用活動工作簿。

試試這個:

objWorkbook.Worksheets("Master").Copy _ 
    After:=objWorkbook.Worksheets(objWorkbook.Worksheets.count) 

你並不需要創建一個Excel的新實例要做到這一點,並沒有這樣做,可以防止這種類型很容易被忽視的問題。

+0

作爲附註 - 它可能失敗的原因是,如果您的活動工作簿有8張工作表,但對象工作簿只有4個,它會嘗試將第8張圖紙添加到對象工作簿中不存在的圖紙上。 –

+0

這正是問題並解決了我的問題。非常感謝。我創建一個新的Excel實例的原因是因爲我做的更多,然後只是複製工作表(從原始工作簿中插入大量數據到這個新工作表)。我只是沒有包含該代碼,因爲我已經測試過它,它的工作原理。 –

相關問題