首页 文章

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

提问于
浏览
0

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

Attempt One - Using the copy method.

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

Attempt Two - Calling a Macro from the Workbook

在“Jordan Individual 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 
...

在“Sheets(”Master“)行的duplicateMaster模块中的行出现错误 . 复制之后:= Sheets(Sheets.Count)” .

错误是相同的“运行时错误'9':下标超出范围 . ”

我怎样才能解决这个问题?

1 回答

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

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

    试试这个:

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

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

相关问题