Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-无法在其他工作簿中复制工作表_Vba_Excel_Copy - Fatal编程技术网

Excel VBA-无法在其他工作簿中复制工作表

Excel VBA-无法在其他工作簿中复制工作表,vba,excel,copy,Vba,Excel,Copy,从工作簿中,我试图打开另一个工作簿,复制该工作簿中的主工作表并重命名它。问题是,无论我尝试什么,当我复制母版时,它似乎都不起作用 尝试一次-使用复制方法。 Sub individualStats() 'Initialize Dim app As New Excel.Application app.Visible = False Dim objWorkbook As Excel.Workbook Set objWorkbook = app.Workbooks.Add("S:\

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

尝试一次-使用复制方法。

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 
...
该错误出现在duplicateMaster模块中“Sheets(“Master”).Copy After:=Sheets(Sheets.Count)”行的duplicateMaster模块中的行上

该错误与“运行时错误'9':下标超出范围”相同

我怎样才能解决这个问题

objWorkbook.Worksheets("Master").Copy _
    After:=objWorkbook.Worksheets(Worksheets.count) 
此处Worksheets.count将引用活动工作簿,但不在您创建的新Excel实例中。相反,它将引用运行代码的实例中的活动工作簿

试试这个:

objWorkbook.Worksheets("Master").Copy _
    After:=objWorkbook.Worksheets(objWorkbook.Worksheets.count) 
您不需要创建新的Excel实例来执行此操作,不这样做将防止此类容易被忽略的问题

此处Worksheets.count将引用活动工作簿,但不在您创建的新Excel实例中。相反,它将引用运行代码的实例中的活动工作簿

试试这个:

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

您不需要创建新的Excel实例来执行此操作,不这样做将防止这种容易被忽略的问题。

那么,索引
工作表只有两种可能的故障,一种是名为“Master”的工作表不存在。Count
不存在。后者似乎不太可能。使用debug.print或其他技术将该语句分成两行,并检查您所处的故障模式…例如,使用:
debug.print objWorkbook.Worksheets(“Master”).Name
,查看是否会引发错误。还可以尝试执行
Open
而不是
Add
Set objWorkbook=app.Workbooks.Open(…)
那么,索引
工作表中只有两种可能的故障,即名为“Master”的工作表不存在。Count
不存在。后者似乎不太可能。使用debug.print或其他技术将该语句分成两行,并检查您所处的故障模式…例如,使用:
debug.print objWorkbook.Worksheets(“Master”).Name
,查看是否会引发错误。还可以尝试执行
Open
而不是
Add
Set objWorkbook=app.Workbooks.Open(…)
作为旁注-它可能失败的原因是,如果活动工作簿有8张工作表,而对象工作簿只有4张,它会尝试将工作表添加到第8张工作表之后,而第8张工作表在对象工作簿中不存在。这正是问题所在,并修复了我的问题。非常感谢。我创建一个新的Excel实例的原因是,我所做的不仅仅是复制工作表(将大量数据从原始工作簿插入到新工作簿)。我只是没有包含该代码,因为我已经测试了它,它可以工作。顺便说一下,它可能失败的原因是,如果活动工作簿有8张工作表,而目标工作簿只有4张,它会尝试在目标工作簿中不存在的第8张工作表之后添加工作表。这正是问题所在,并修复了我的问题。非常感谢。我创建一个新的Excel实例的原因是,我所做的不仅仅是复制工作表(将大量数据从原始工作簿插入到新工作簿)。我只是没有包括那段代码,因为我已经测试过了,它可以工作了。