【发布时间】:2016-02-19 18:33:16
【问题描述】:
我试图从一个工作簿打开另一个工作簿,复制该工作簿中的主工作表并重命名它。问题是,无论我尝试什么,当我复制主表时,它似乎都不起作用。
尝试一 - 使用复制方法。
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':下标超出范围。”
尝试二 - 从工作簿调用宏
在“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").Copy After:=Sheets(Sheets.Count)" 行的 duplicateMaster 模块中的行中出现错误。
错误是一样的“运行时错误'9':下标超出范围。”
我该如何解决这个问题?
【问题讨论】:
-
那么只有两个可能的失败,一个名为“Master”的工作表不存在,索引
Worksheets.Count不存在。后者似乎不太可能。使用 debug.print 或其他技术将该语句分成两行并检查您遇到的故障模式...... -
例如,使用:
Debug.Print objWorkbook.Worksheets("Master").Name看看是否会引发错误。 -
也尝试使用
Open而不是Add:Set objWorkbook = app.Workbooks.Open(...)