从工作簿,我试图打开另一个工作簿,复制该工作簿中的主工作表并重命名它 . 问题在于,无论我尝试什么,当我复制主表时似乎都不起作用 .
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 回答
这里的Worksheets.count将引用活动工作簿,但不会引用您创建的新Excel实例 . 它将引用代码运行的实例中的活动工作簿 .
试试这个:
您不需要创建新的Excel实例来执行此操作,并且不这样做会阻止此类容易被忽视的问题 .