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



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

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

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

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

我在模块的顶部有一个选项Explicit,我已经检查过了,以确保它正在插入的子中没有任何全局变量。也就是说,我完全有可能忽略了一些东西。我还在某一点上放了一个"计时器",以确保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:DataTeamExcelDevAudit ReportRegion WorkbooksRegion" & 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

我在将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) 我回去寻找代码中所有的.范围,并确保它是完整的构造。。

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

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

ActiveSheet.Range("A1").Select

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

感谢谷歌和您的讨论,我找到了以下解决方案(基于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"可以替换为图纸上的任何单元格。

您必须使用了该对象,释放了它("disconnect"),然后再次使用它。只有在完成对象之后,或者在调用Form_Closing时才释放它。

我在一个有数百行代码的大型Excel2000电子表格中遇到了同样的问题。我的解决方案是在开始上课时激活工作表。I.E.本工作簿。工作表("工作表名称")。激活当我注意到如果"WorkSheetName"在启动操作(代码)时处于活动状态,则不会发生错误时,我终于发现了这一点。让我疯了好一会儿。

有几件事要尝试。。。

  1. 注释掉第二行"Set NewBook"代码。。。

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

  3. 复制工作表后执行另存为。

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

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

您试图复制到的目标工作表已关闭。(此处为newbook.Sheets("Sheet1"))。在复制到目标之前添加以下语句。

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

这将解决问题!!

最新更新