将工作表复制到同一Excel工作簿会使错误 - 下标超出范围

时间:2017-12-16 23:29:09

标签: excel vba excel-vba

将工作表复制到同一个Excel工作簿会产生错误 - 下标超出范围。

sub copyWorkSheet()
    Dim myPath As String
    myPath = Application.ActiveWorkbook.FullName

    Workbooks("Generator.xlsm").Activate

    Sheets("Details 1").Select
    Sheets("Details 1").Copy After:=Workbooks(myPath).Sheets("Details 2")
End Sub

2 个答案:

答案 0 :(得分:2)

有许多行可能发生错误:

  

工作簿(" Generator.xlsm&#34)。激活

确保" Generator.xlsm"是开放的 - 激活制造商'发电机'活动和可用的工作簿,但为您打开它。

您还必须确保'详细信息1'和'细节2'存在于两个工作簿中,如果不存在,也会产生错误。

示例更正的代码:

Sub copyWorkSheet()
    Set otherWorkbook = Application.Workbooks.Open("Generator.xlsm")
    otherWorkbook.Activate
    otherWorkbook.Sheets("Details 1").Select
    otherWorkbook.Sheets("Details 1").Copy After:=Application.ThisWorkbook.Sheets("Details 2")
End Sub

此代码段假设

  • 您想要复制到' ThisWorkbook" - 与vba相关的工作簿
  • 这两本工作簿都包含"详细信息1"和"详情2"
  • " Generator.xlsm"在此代码运行后将保持打开状态。

答案 1 :(得分:0)

您的问题是由此行引起的:

myPath = Application.ActiveWorkbook.FullName

返回对象的名称,包括其在磁盘上的路径

要处理Workbooks集合中的项目,可以使用其Name属性,该属性不包含其路径。将上述行更改为:

myPath = Application.ActiveWorkbook.Name
如果ActiveWorkbook包含名为Detail 2的工作表,

将解决您的问题。

也就是说,您应该尽量避免使用ActiveWorkbook,因为它可能不是您认为的工作簿。假设您要复制到保存Sub的工作簿中,引用ThisWorkbook.Name会更安全。