Ошибка автоматизации Excel VBA: вызванный объект отключился от своих клиентов

Я знаю, что видел ссылки на эту проблему раньше, но я пробовал несколько предложений, и я все еще получаю ошибку. У меня есть книга, которая собирает данные из другой книги и создает отчет. Затем я хочу создать новую книгу, скопировать информацию отчет в новую книгу, сохранить книгу и закрыть ее, а затем перейти к следующему докладу. Он должен сделать это около 10 раз. В той части моего кода, где я копирую и вставляю листы, я получаю ошибку

ошибка -2147417848 ошибка автоматизации вызываемый объект имеет отключен от своих клиентов

Я проверил другие сообщения об этой ошибке и попробовал предлагаемые решения без каких-либо результатов. интересно, что иногда он будет делать это через 5 циклов кода до взлома, иногда только 2. Единственная согласованность заключается в том, что он всегда ломается в одном и том же месте

fromBook.Листы ("Отчет").Копировать Перед:=newBook.Sheets("Лист1")

У меня есть опция 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

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 )я вернулся и искал все.диапазон в коде и убедился, что это полная конструкция..

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

или (не 100% уверен, что это правильный синтаксис, но это "усилие", которое я сделал)

ActiveSheet.Range("A1").Select

Я только что встретил эту проблему сегодня: я перенес свой проект Excel из Office 2007 в 2010. В определенный момент, когда мой макрос попытался вставить новую строку (например, ), то же сообщение об ошибке. Это происходит только тогда, когда ранее был отредактирован другой лист (мой макрос переключается на другой лист).

благодаря Google и вашему обсуждению я нашел следующее решение (на основе ответа, данного "красным" в ответ на Jul 30 ' 13 в 0: 27): после переключения на лист a Ячейка должна быть отредактирована перед вставкой новой строки. Я добавил следующий код:

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

"B1"можно заменить любой ячейкой на листе.


вы должны были использовать объект, отпустить его ("отключить") и использовать его снова. Отпустите объект только после того, как вы закончите с ним, или при вызове Form_Closing.


У меня была такая же проблема в большой электронной таблице Excel 2000 с сотнями строк кода. Мое решение состояло в том, чтобы сделать рабочий лист активным в начале класса. И. Е. Файл Thisworkbook.Рабочие Листы ("WorkSheetName").Активировать Это было, наконец, обнаружено, когда я заметил, что если "WorkSheetName" был активен при запуске операции (кода), ошибка не произошла. Какое-то время я сходил с ума.


пару вещей, чтобы попробовать...

  1. прокомментируйте вторую строку кода" Set NewBook"...

  2. У вас уже есть ссылка на книгу.

  3. Сделайте ваши SaveAs после копирования листов.


ошибка в приведенной ниже строке кода (как указано запросчиком-William) обусловлена следующей причиной:

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

лист назначения, который вы пытаетесь скопировать, закрыт. (Здесь newbook.Sheets("Sheet1")). Добавьте оператор below непосредственно перед копированием в пункт назначения.

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

Это решит проблему!!