Excel VBA - 无法在其他工作簿中复制工作表
从工作簿中,我试图打开另一个工作簿,复制该工作簿中的主工作表并重命名它。问题是,无论我尝试什么,似乎都不工作,当我复制主表。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':下标超出范围。”
我该如何解决这个问题?
objWorkbook.Worksheets("Master").Copy _
After:=objWorkbook.Worksheets(Worksheets.count)
这里Worksheets.count将把活动工作簿,但没有在Excel的新实例创建。它将在您的代码正在运行的实例中引用活动工作簿。
试试这个:
objWorkbook.Worksheets("Master").Copy _
After:=objWorkbook.Worksheets(objWorkbook.Worksheets.count)
你并不需要创建一个Excel的新实例要做到这一点,并没有这样做,可以防止这种类型很容易被忽视的问题。
作为附注 - 它可能失败的原因是,如果您的活动工作簿有8张工作表,但对象工作簿只有4个,它会尝试将第8张图纸添加到对象工作簿中不存在的图纸上。 –
这正是问题并解决了我的问题。非常感谢。我创建一个新的Excel实例的原因是因为我做的更多,然后只是复制工作表(从原始工作簿中插入大量数据到这个新工作表)。我只是没有包含该代码,因为我已经测试过它,它的工作原理。 –
那么只有两个可能的失败,名为“主”的表不存在,索引“Worksheets.Count”不存在。后者似乎不太可能。将该语句分成两行,使用debug.print或其他技术,并检查您正在使用的失败模式... –
例如,使用:'Debug.Print objWorkbook.Worksheets(“Master”)。Name'并参见如果这会引发错误。 –
另请尝试使用'Open'而不是'Add':'Set objWorkbook = app.Workbooks.Open(...)' –