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

时间:2013-06-25 16:41:08

标签: excel-vba automation runtime-error vba excel

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

  

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

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

  

fromBook.Sheets(“Report”)。复制之前:= 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

6 个答案:

答案 0 :(得分:6)

我在将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

答案 1 :(得分:3)

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

感谢Google和您的讨论,我找到了以下解决方案(根据" red"在7月30日回答' 13:0:27)给出的答案:切换到在插入新行之前,必须编辑单元格。我添加了以下代码:

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

" B1"可以用工作表上的任何单元替换。

答案 2 :(得分:2)

您必须使用该对象,将其释放("断开"),然后再次使用它。只有在您完成对象或调用Form_Closing时才会释放对象。

答案 3 :(得分:1)

我在一个包含数百行代码的大型Excel 2000电子表格中遇到了同样的问题。我的解决方案是在类的开头激活工作表。 I.E. ThisWorkbook.Worksheets( “WorkSheetName”)。激活 当我注意到如果“WorkSheetName”在启动操作(代码)时处于活动状态时,最终发现了这一点,则没有发生错误。让我疯狂了很长一段时间。

答案 4 :(得分:0)

要尝试的事情......

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

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

  3. 复制表格后,请执行您的SaveAs。

答案 5 :(得分:0)

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

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

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

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

这将解决问题!!