Excel VBA - 无法在另一个工作簿中复制工作表
Excel VBA - Unable to duplicate worksheet in another workbook
我试图从一个工作簿中打开另一个工作簿,复制该工作簿中的母版sheet 并重命名。问题是无论我尝试什么,当我复制母版 sheet 时似乎都不起作用。
尝试一 - 使用复制方法。
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
我已经标记了出错的行。错误是
"Run-time error '9': Subscript out of range."
尝试二 - 从工作簿调用宏
我在 "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模块中
错误一样"Run-time error '9': Subscript out of range."
我该如何解决这个问题?
objWorkbook.Worksheets("Master").Copy _
After:=objWorkbook.Worksheets(Worksheets.count)
此处 Worksheets.count 将引用活动工作簿,但 不在您创建的 Excel 的新实例中 。在您的代码为 运行.
的实例中,它将改为引用活动工作簿
试试这个:
objWorkbook.Worksheets("Master").Copy _
After:=objWorkbook.Worksheets(objWorkbook.Worksheets.count)
您不需要创建 Excel 的新实例来执行此操作,不这样做将防止此类容易被忽视的问题。
我试图从一个工作簿中打开另一个工作簿,复制该工作簿中的母版sheet 并重命名。问题是无论我尝试什么,当我复制母版 sheet 时似乎都不起作用。
尝试一 - 使用复制方法。
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
我已经标记了出错的行。错误是 "Run-time error '9': Subscript out of range."
尝试二 - 从工作簿调用宏
我在 "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模块中错误一样"Run-time error '9': Subscript out of range."
我该如何解决这个问题?
objWorkbook.Worksheets("Master").Copy _
After:=objWorkbook.Worksheets(Worksheets.count)
此处 Worksheets.count 将引用活动工作簿,但 不在您创建的 Excel 的新实例中 。在您的代码为 运行.
的实例中,它将改为引用活动工作簿试试这个:
objWorkbook.Worksheets("Master").Copy _
After:=objWorkbook.Worksheets(objWorkbook.Worksheets.count)
您不需要创建 Excel 的新实例来执行此操作,不这样做将防止此类容易被忽视的问题。