【问题标题】:Method 'Copy' of object '_Worksheet' failed对象“_Worksheet”的方法“复制”失败
【发布时间】:2022-01-14 14:53:56
【问题描述】:

我现在第一次遇到错误

对象“_Worksheet”的“复制”方法失败

我听说这是一个很常见的错误,但我无法找到解决方案。当我搜索槽SO时,我发现了很多关于

对象的“范围”失败-错误。

这个错误是由工作站的内存限制引起的还是软件相关的错误?

有人想解决这个问题吗?

如果我感兴趣的是我的 VBA 代码:

Private Sub CommandButton1_Click()
MsgBox "Message"

  Dim wb As Workbook
  Set wb = Workbooks.Add(xlWBATWorksheet)
  wb.Sheets(1).Name = "deletethissheet"

  Dim ws As Worksheet
  For Each ws In ThisWorkbook.Worksheets
    ws.Copy After:=wb.Sheets(wb.Sheets.Count)
  Next

  For Each ws In wb.Worksheets
    ws.UsedRange.Formula = ws.UsedRange.Value

    Dim sh As Shape
    For Each sh In ws.Shapes
      sh.Delete
    Next

  Next

  For Each Link In wb.LinkSources(xlLinkTypeExcelLinks)
  wb.BreakLink Name:=Link, Type:=xlLinkTypeExcelLinks
  Next

  wb.Sheets("deletethissheet").Delete
  wb.SaveAs Replace(ThisWorkbook.FullName, ".xlsm", "_" & Format(Date, "yyyymmdd") & ".xlsx"), xlOpenXMLWorkbook
  wb.Close SaveChanges:=False

End Sub

ws.Copy After:=wb.Sheets(wb.Sheets.Count) 是错误的原因。

【问题讨论】:

  • 您的代码不会对我产生任何错误。我可以创建工作簿并复制工作表,所以肯定还有别的东西。 Myabe 受保护的工作簿本身的任何工作表?您是否尝试过使用 F8 进行调试并检查它是否在第一次循环或特定工作表时失败?
  • 你可以试试After:=wb.Worksheets(wb.Worksheets.Count)Sheet也可以参考Charts,可能会报错。
  • 如果您尝试添加不基于任何模板的普通工作簿会怎样? Set wb = Workbooks.Add 另外,什么版本的 Excel? Windows 还是 Mac?
  • 我唯一能想到的是Worksheets是一个集合,它是基于0的。因此你可以试试After:=wb.Worksheets(wb.Worksheets.Count-1)
  • 源文件,是XLS吗? 所有单元格都已格式化是什么意思?

标签: excel vba


【解决方案1】:

这是一年前的帖子,但万一其他人在这里找到了他们的方式,我也收到了这个错误并解决了它。我试图在隐藏的工作表上使用 .copy 函数。一旦我取消隐藏工作表,宏就可以正常运行。通过在 .Copy 代码之前添加 Worksheets("Sheet1").visible = True 和在代码末尾添加 Worksheets("Sheet1").visible = False 它为我修复了错误。

【讨论】:

    【解决方案2】:

    这已经很老了,但我也在官方 MS 文档中找到了可能的原因:

    Source 和 Destination 必须在同一个 Excel.Application 实例中, 否则会引发运行时错误 '1004': No such interface 支持,如果使用了像 Sheet1.Copy objWb.Sheets(1) 之类的东西,或者 运行时错误“1004”:Worksheet 类的复制方法失败,如果 类似于 ThisWorkbook.Worksheets("Sheet1").Copy objWb.Sheets(1) 被使用了。

    来源:https://docs.microsoft.com/en-us/office/vba/api/Excel.Worksheet.Copy

    这绝对是我的原因。希望对你也有帮助!

    编辑:相反,我只是将 Range.CurrentRegion 从 A1 开始复制到另一个工作表,这似乎可以跨多个应用程序实例工作。样机示例:

            Dim rg As Range
            Dim xl As Application
            Dim wb As Workbook
            
            Set xl = New Excel.Application
            Set wb = xl.Workbooks.Open("C:\foo.xlsx")
            Set rg = wb.Worksheets(1).Range("A1").CurrentRegion
            
            rg.Copy ThisWorkbook.Worksheets(1).Range("A1")
    

    【讨论】:

      【解决方案3】:

      尽管进行了深入研究,但我找不到有关此错误的任何详细信息。解决方案对我来说非常简单,就是手动将所有内容复制到新工作表上并从那里启动宏。此错误可能是由于资源有限或单元格损坏所致。

      VBA 本身可以工作。如果有人遇到这种问题,重建工作表可能会起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多