12

我知道我之前已经看到过对这个问题的引用,但我已经尝试了一些建议,但我仍然收到错误。我有一本从另一本书收集数据并生成报告的工作簿。然后我想制作一个新工作簿,将报表信息复制到新簿中,保存新簿并关闭它,然后继续下一个报表。它应该这样做大约 10 次。在我复制和粘贴工作表的部分代码中,出现错误

错误 -2147417848 自动化错误 调用的对象已与其客户端断开连接

我检查了有关此错误的其他帖子,并尝试了建议的解决方案,但没有任何结果。有趣的是,有时它会在中断之前完成 5 个代码循环,有时只有 2 个。唯一的一致性是它总是在同一个地方中断

fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1")

我在模块顶部有 Explicit 选项,并且我已经检查以确保它正在进入的 sub 内部没有任何全局变量。话虽如此,我完全有可能忽略了一些东西。我还设置了一个“计时器”,以确保 excel 表不会相互重叠。

我真的可以使用帮助!

这是我的子代码:

Sub CreateAndSave(ByRef Reg As Integer, ByVal j As Integer)

        Dim fromBook As Workbook
        Dim fromSheet As Worksheet
        Dim newBook As Workbook
        Dim fileExists As Boolean
        Dim i As Integer
        Dim Holder As Integer


        Application.ScreenUpdating = False
        Application.DisplayAlerts = False

            Set fromBook = Application.Workbooks("Region_Audit_Report")
            Set newBook = Workbooks.Add

           With newBook
            .SaveAs Filename:="G:\DataTeam\ExcelDev\Audit Report\Region Workbooks\Region" & Reg & " " & Month(Date) & "-" & Day(Date) & "-" & Year(Date) & ".xlsx" _
            , FileFormat:=xlOpenXMLWorkbook
           End With

        Set newBook = Application.Workbooks("Region" & Reg & " " & Month(Date) & "-" & Day(Date) & "-" & Year(Date) & ".xlsx")

        fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1")
        fromBook.Sheets("MonthData").Copy After:=newBook.Sheets("Report")

        newBook.Sheets("MonthData").Range("A1") = "Month"
        newBook.Sheets("MonthData").Range("B1") = "Store#"
        newBook.Sheets("MonthData").Range("C1") = "District"
        newBook.Sheets("MonthData").Range("D1") = "Region"
        newBook.Sheets("MonthData").Range("E1") = "Due Date"
        newBook.Sheets("MonthData").Range("F1") = "Comp Date"
        newBook.Sheets("MonthData").Range("G1") = "# of Errors"
        newBook.Sheets("MonthData").Range("H1") = "Late?"
        newBook.Sheets("MonthData").Range("I1") = "Complete?"

        newBook.Sheets("MonthData").Range("A1:I1").Interior.ColorIndex = 43


            newBook.Save

            newBook.Close


            Application.DisplayAlerts = True

    End Sub
4

6 回答 6

7

我在将 Excel 2000 转换为 2010 的多个项目中遇到了这个问题。这是我发现的似乎有效的方法。我做了两个更改,但不确定是哪个导致成功:

1)我更改了关闭和保存文件的方式(从 close & save = true 保存为相同的文件名并关闭文件:

...
    Dim oFile           As Object       ' File being processed
...
[Where the error happens - where aArray(i) is just the name of an Excel.xlsb file]
   Set oFile = GetObject(aArray(i))
...
'oFile.Close SaveChanges:=True    - OLD CODE WHICH ERROR'D
'New Code
oFile.SaveAs Filename:=oFile.Name
oFile.Close SaveChanges:=False

2)我回去寻找代码中的所有 .range 并确保它是完整的构造..

Application.Workbooks("workbook name").Worksheets("worksheet name").Range("G19").Value

或(不是 100% 确定这是否是正确的语法,但这是我所做的“努力”)

ActiveSheet.Range("A1").Select
于 2013-07-30T00:27:34.920 回答
4

我今天刚刚遇到这个问题:我将 Excel 项目从 Office 2007 迁移到 2010。在某个时刻,当我的宏尝试插入新行(例如Range("5:5").Insert)时,出现了相同的错误消息。仅当先前已编辑另一张工作表时才会发生这种情况(我的宏切换到另一张工作表)。

感谢 Google 和您的讨论,我找到了以下解决方案(基于“red”在 2013 年 7 月 30 日 0:27 回答时给出的答案):切换到工作表后,必须先编辑单元格,然后再插入新的排。我添加了以下代码:

'=== Excel bugfix workaround - 2014.08.17
Range("B1").Activate
vCellValue = Range("B1").Value
Range("B1").ClearContents
Range("B1").Value = vCellValue

“B1”可以替换为工作表上的任何单元格。

于 2014-08-17T20:56:28.637 回答
3

您必须使用过该对象,释放它(“断开连接”),然后再次使用它。仅在完成对象后或调用时才释放对象Form_Closing

于 2014-04-08T02:17:20.187 回答
1

我在包含数百行代码的大型 Excel 2000 电子表格中遇到了同样的问题。我的解决方案是在课堂开始时使工作表处于活动状态。IE ThisWorkbook.Worksheets("WorkSheetName").Activate 当我注意到如果“WorkSheetName”在启动操作(代码)时处于活动状态时,最终发现该错误不会发生。让我疯狂了好一阵子。

于 2013-12-09T00:32:45.590 回答
0

有几件事要尝试...

  1. 注释掉第二行“Set NewBook”代码...

  2. 您已经拥有对工作簿的对象引用。

  3. 复制工作表后执行 SaveAs。

于 2013-06-26T05:06:51.413 回答
0

以下代码行中的错误(如请求者-William 所述)是由于以下原因:

fromBook.Sheets("Report").Copy Before:=newBook.Sheets("Sheet1")

您尝试复制到的目标工作表已关闭。(这里newbook.Sheets("Sheet1"))。在复制到目的地之前添加以下语句。

Application.Workbooks.Open ("YOUR SHEET NAME")

这将解决问题!

于 2015-06-24T04:30:08.907 回答