Excel VBA - 无法在另一个工作簿中复制工作表

时间:2016-02-19 18:33:17

标签: excel vba excel-vba copy

从工作簿中,我试图打开另一个工作簿,复制该工作簿中的主工作表并重命名它。问题在于,无论我尝试什么,在复制母版时似乎都无法工作。

尝试一次 - 使用复制方法。

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':下标超出范围。"

尝试二 - 从工作簿中调用宏

在#34;乔丹个人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 
...

错误出现在行#34;表格中的duplicateMaster模块的行上(" Master")。复制之后:=表格(Sheets.Count)"。

错误相同"运行时错误' 9':下标超出范围。"

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

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

这里的Worksheets.count将引用活动工作簿,但不在您创建的新Excel实例中。它将引用代码运行的实例中的活动工作簿。

试试这个:

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

您不需要创建新的Excel实例来执行此操作,但不这样做会阻止此类容易被忽视的问题。