Разрушительный сбой excel automation error

 

Здравствуйте.
Ранее в одной из тем обсуждал причину появления ложных книг в объектной структуре файла.
Выяснилось, что это должно быть связано с ошибкой «Automation error.Разрушительноый сбой» возникающей при его запуске.
Но причину возникновения самой этой ошибки рекомендовали рассмотреть в отдельной теме.
Поэтому прошу помощи в разборе данной проблемы. В чем её причина?
Суть проблемы такова: книга (см. вложенный файл) была создана в Excel 2016, но пару раз запускалась через Excel 2010 (не лиц.).
При запуске возникало сообщение «Automation error. Разрушительный сбой», открывался файл и редактор VBA.
Если ни чего не сохранять и не менять то и пользоваться файлом было нельзя.
Чтобы можно было пользоваться, выделял весь код в том модуле, который открылся автоматически при запуске, комментировал его и сохранял.
После этого сохранял сам файл. При этом команда СОХРАНИТЬ работала, как СОХРАНИТЬ КАК. Файл соответственно сохранял с заменой существующего.
После этого можно было снова пользоваться полученным файлом на Excel 2010 (не лиц.)
После использования этого файла на Excel 2016 история повторялась.

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

Наверное Вам надо создать пустой файл, скопируйте в него все листы из имеющегося файла, и скопируйте модули с макросами. С тем файлом, который Вы выложили на форуме, работать наверное нельзя, т.к. если зайти в VBE, то видно, что несколько модулей книг. Такого по идее не должно быть.
Почему такое произошло, я не знаю. Один и тот же файл можно открывать и в Excel 2016 и 2010 — проблем не должно быть.

 

Вот и хотелось причину выяснить.
А то получится, что вместе с листами и модулями и проблема в новый файл перейдет…
Может имена объектов в объектной модели Excel 2016 и 2010 отличаются или имеет значение наличие лиц. ?

 

Karataev

Пользователь

Сообщений: 2306
Регистрация: 23.10.2014

Причину можно искать, но файлом в том виде, какой сейчас есть, мне кажется нельзя пользоваться.
Вроде нет ограничения на использование одного и того же файла в разных версиях, в Майкрософт это предусмотрели и не должно быть сбоев. Если будут какие-то новые объекты, то они не должны приводить к сбою в старых версиях.

 

sokol92

Пользователь

Сообщений: 4446
Регистрация: 10.09.2017

Уважаемый DmitriyBastr! Профессор (

ZVI

) уже наметил для Вашего файла (и аналогичных)

курс лечения

.  :) От себя хочу добавить: перед копированием листов преобразуйте «умные» таблицы в обычные диапазоны.
Версии Excel (2007-2016) для данного случая значения не имеют. О причинах «порчи» можно только гадать…

 

DmitriyBastr

Пользователь

Сообщений: 82
Регистрация: 04.10.2017

#6

21.02.2018 15:00:35

Этим файлом и не пользуются уже.
Но по его образцу будут создаваться другие, более сложные и ответственные. И проблема может повториться.
Поэтому хотелось бы найти причину. Есть подозрение, что она именно в коде, потому что при запуске файла запускается VBE.

Разрушительный сбой

Gameower

Дата: Понедельник, 11.07.2016, 06:24 |
Сообщение № 1

Группа: Пользователи

Ранг: Участник

Сообщений: 95


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Доброго времени суток коллеги.
у меня есть файлик эксель, и при запуске стала появлятся ошибка : Разрушительный сбой.
ПОдскажите как ее устранить?
заранее благодарен за вашу помощь!

 

Ответить

SLAVICK

Дата: Понедельник, 11.07.2016, 10:45 |
Сообщение № 2

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

У меня Ваш файл открылся без проблем может с офисом что не так?.
Попробуйте восстановить или на другом компе.
Файл пересохранил в своем офисе — иногда помогает.


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Karataev

Дата: Понедельник, 11.07.2016, 11:32 |
Сообщение № 3

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Может быть сообщение «Разрушительный сбой» — это сообщение макроса.


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevПонедельник, 11.07.2016, 12:33

 

Ответить

SLAVICK

Дата: Понедельник, 11.07.2016, 11:55 |
Сообщение № 4

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

«Разрушительный сбой» — это сообщение макроса.

Не вроде не нашел такого.
но возможно из за:
[vba]

Код

newString = «\ServerDocumentsDANFOSS»

[/vba]
есть доступ к серверу?


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Karataev

Дата: Понедельник, 11.07.2016, 12:28 |
Сообщение № 5

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

SLAVICK, но в любом случае может быть причиной этого сообщения является макрос, а не сам офис.
Да, я тоже смог посмотреть макросы, оказывается был общий доступ для файла, я подумал, что защита использовалась.


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevПонедельник, 11.07.2016, 12:34

 

Ответить

SLAVICK

Дата: Понедельник, 11.07.2016, 12:36 |
Сообщение № 6

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

может быть причиной этого сообщения является макрос,

ну дык а это откуда по Вашему? :D

newString = «\ServerDocumentsDANFOSS»

Из макроса ;) .


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Karataev

Дата: Понедельник, 11.07.2016, 12:40 |
Сообщение № 7

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

Gameower, предположительно, у Вас проблема с макросами, а не с самим офисом. Хотя если обновления не устанавливали для офиса, то установите (иногда некоторые ошибки возникают из-за отсутствия обновлений для офиса).
Узнайте, в каком макросе у Вас проблемы и затем уже конкретизируйте вопрос на форуме.


Киви-кошелек: 9166309108

 

Ответить

Gameower

Дата: Понедельник, 11.07.2016, 13:01 |
Сообщение № 8

Группа: Пользователи

Ранг: Участник

Сообщений: 95


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Karataev, предположительно сбой возникает при обновлении курса евро текущего, при открытии книги в верхней правой ячейке стоит значение после разрушительного сбоя он обновляется и так каждый раз, может в нем проблема? эксель не показывает где в макросе ошибка выпадает

 

Ответить

SLAVICK

Дата: Понедельник, 11.07.2016, 13:25 |
Сообщение № 9

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

предположительно сбой возникает при обновлении курса евро текущего,

В том то и дело что предположительно.
А также может из-за:

newString = «\ServerDocumentsDANFOSS»

или:
[vba]

Код

With Sheets(«Тех замены»)

[/vba]
Или еще чего.

Это Ваш файл?
Если да — положите сюда незащищенный проект, если нет — то согласно правил форума :
обсуждать методы взлома программ — запрещено — обращайтесь к автору проекта.


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Karataev

Дата: Понедельник, 11.07.2016, 13:45 |
Сообщение № 10

Группа: Проверенные

Ранг: Старожил

Сообщений: 1330


Репутация:

528

±

Замечаний:
0% ±


Excel

положите сюда незащищенный проект

в файле нет защиты — это просто сделан совместный доступ, при его установке скрывается содержимое vba проекта.

Gameower, можно так поискать проблемный код. Удалите из файла все макросы, а оставьте только модуль «Module1». Не забудьте удалить макросы и в модулях листов.
Затем посмотрите, осталась ли ошибка. Если осталась, то дальше уже нужно смотреть модуль «Module1» и процедуру «Курс_Евро». И выложите на форуме файл, в котором будет только один проблемный модуль.


Киви-кошелек: 9166309108

Сообщение отредактировал KarataevПонедельник, 11.07.2016, 13:48

 

Ответить

SLAVICK

Дата: Понедельник, 11.07.2016, 15:57 |
Сообщение № 11

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

это просто сделан совместный доступ,

хм — стормозил.
Посмотрел что проект Unwieveble — и подумал, что защищен как надстройка.
Ну все равно уже написал возможные причины:

newString = «\ServerDocumentsDANFOSS»
или:
With Sheets(«Тех замены»)

Листа Тех замены в файле нет, а макрос — Worksheet_Change листа «Книга запросов DANFOSS» пытается к нему обратится.
да и функция «Курс_Евро» у меня не работает.
Попробуйте так:
[vba]

Код

Function Курс_Евро(Optional ByVal Дата) As Currency   ‘ запрос курса Евро с сайта ЦБ РФ
    ‘—————————————————————————————
    ‘ Procedure : Курс_Евро
    ‘ Author    : Основа — Pavel55, коррекция — Alex_ST: 2010-01-28
    ‘ URL       : http://www.planetaexcel.ru/forum.php?thread_id=6870&page_forum=2&allnum_forum=34
    ‘ Date      : 28.01.2010
    ‘ Purpose   : Запрос курса Евро, установленного ЦБР на заданную дату
    ‘ Notes     : По умолчанию — текущая дата
    ‘—————————————————————————————
    Dim Запрос$, Ответ$, Курс$
    Dim oHttp As Object
    Dim ДЕНЬ$, Месяц$, ГОД$
    Application.Volatile
    If IsMissing(Дата) Then Дата = Date
    If Not IsDate(Дата) Then Дата = CDate(Дата)
    ДЕНЬ = Format(Дата, «dd»): Месяц = Format(Дата, «mm»): ГОД = Format(Дата, «yyyy»)
    Запрос = «http://cbr.ru/currency_base/daily.aspx?C_month=» & Месяц & «&C_year=» _
            & ГОД & «&date_req=» & ДЕНЬ & «%2F» & Месяц & «%2F» & ГОД
    On Error Resume Next
    Set oHttp = CreateObject(«MSXML2.ServerXMLHTTP»)
    If Err.Number <> 0 Then Set oHttp = CreateObject(«MSXML.ServerXMLHTTP»)
    On Error GoTo 0
    If oHttp Is Nothing Then Exit Function
    oHttp.Open «GET», Запрос, False
    oHttp.setTimeouts 1000, 1000, 1000, 1000
    On Error Resume Next
    oHttp.Send
    Ответ = UCase(oHttp.responseText)
    Курс = CCur(Mid(Ответ, InStr(InStr(1, Ответ, «EUR»), Ответ, «</TD></TR>») — 7, 7))
    Set oHttp = Nothing
    Курс_Евро = Курс
End Function

[/vba]


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Gameower

Дата: Вторник, 12.07.2016, 04:50 |
Сообщение № 12

Группа: Пользователи

Ранг: Участник

Сообщений: 95


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

проблема в этом модуле, удалив его все нормализуется, еще загвостка в том что файл используется в локальной сети несколькими пользователями и это осложняет.

 

Ответить

Gameower

Дата: Вторник, 12.07.2016, 12:54 |
Сообщение № 13

Группа: Пользователи

Ранг: Участник

Сообщений: 95


Репутация:

0

±

Замечаний:
0% ±


Excel 2010


ваш вариант при вставке в мой модуль не работает

 

Ответить

SLAVICK

Дата: Вторник, 12.07.2016, 16:34 |
Сообщение № 14

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

при вставке в мой модуль не работает

функция не работает?
А в приложенном мной примере считает?


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Gameower

Дата: Четверг, 14.07.2016, 07:15 |
Сообщение № 15

Группа: Пользователи

Ранг: Участник

Сообщений: 95


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

вроде как да и сбоя нет, но в моем файле если я вставляю, то там вообще не работает функция. я бы выложил файл полностью,но форум не позволяет по весу это сделать

 

Ответить

SLAVICK

Дата: Четверг, 14.07.2016, 12:13 |
Сообщение № 16

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019

вроде как да и сбоя нет, но в моем файле если я вставляю, то там вообще не работает функция.

А Вы старую функцию удалили? Нужно обязательно удалить, иначе программа не понимает с какой функцией ей работать.


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Alex_ST

Дата: Четверг, 14.07.2016, 16:38 |
Сообщение № 17

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

функция «Курс_Евро» у меня не работает

А у меня прекрасно работает
А вот вариант с добавкой[vba]

Код

     oHttp.setTimeouts 1000, 1000, 1000, 1000
    On Error Resume Next

[/vba] перед oHttp.Send — не работает.



С уважением,
Алексей
MS Excel 2003 — the best!!!

Сообщение отредактировал Alex_STПятница, 15.07.2016, 12:52

 

Ответить

SLAVICK

Дата: Четверг, 14.07.2016, 17:00 |
Сообщение № 18

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019


наверное потому что у меня написано:
[vba]

Код

Set oHttp = CreateObject(«MSXML2.ServerXMLHTTP»)

[/vba]а у Вас:
[vba]

Код

Set oHttp = CreateObject(«MSXML2.XMLHTTP»)

[/vba]
:D .
Не знаю от чего зависит, но у меня Ваш первоначальный вариант функции сейчас не работает(может от офиса — несколько лет назад — работала), поэтому я немного ее поменял — надеюсь Вы не против :)


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Alex_ST

Дата: Пятница, 15.07.2016, 13:03 |
Сообщение № 19

Группа: Друзья

Ранг: Участник клуба

Сообщений: 3176


Репутация:

604

±

Замечаний:
0% ±


2003

Слава, нет проблем. Наоборот — спасибо, что подправил. (давай на «ТЫ» 7)
Но, к сожалению, твоя процедура не идёт на 2003, а моя на том офисе, который у тебя (к стати, какой?)
Жаль, что не получилось «офисонезависимой» процедуры.
Ну, тогда, если твоя точно работает, нужно проосить Сержа подправить старт-топик — добавить версию для Офиса старше, чем…



С уважением,
Алексей
MS Excel 2003 — the best!!!

 

Ответить

SLAVICK

Дата: Понедельник, 18.07.2016, 11:31 |
Сообщение № 20

Группа: Модераторы

Ранг: Старожил

Сообщений: 2290


Репутация:

766

±

Замечаний:
0% ±


2019


Ок beer .

а моя на том офисе, который у тебя (к стати, какой?)

сейчас в 99% использую 2016х64-й офис — на новой работе у всех такой (наконец — то забыл про отчеты в разных версиях :D )
Еще есть 2010х32 — на нем тестирую иногда разные вещи ++ не знаю почему, но иногда файл в 2016-м(и в 2013-м такое было) — тупо перестает открываться. А в 2010-м без проблем.
Потом после пересохранения и в 2016-м открывается без проблем %) .

Проверил:
моя версия работает и в 2010х32 и в 2016х64.
и твоя версия — сейчас работает и там и там(хотя раньше в 2016-м выдавала ошибку… killed ).

нужно просить Сержа подправить старт-топик

Думаю нужно еще протестировать на др. версиях, чтобы уже точно знать где и что работает. Видишь у меня она то работает то нет. Даже не знаю в чем причина — списываю на ЕЩЕ ОДИН глюк 2016х64. :( .


Иногда все проще чем кажется с первого взгляда.

 

Ответить

Есть программа , написанная на VBA и находится на сервере. Несколько человек одновременно работает с этими даннымы.
До сих пор это программа работала без проблема.
Но, сегодня мне понадобилось нескольо изменения делать и для этого и отключила доступ к книге.
После изменение хотела поставить галочку доступ к книге. После этого программа не открывается. Такая ошибка получается: «Automation error. Разрушительный сбой»
Дело в том что это ошибка получается только после галочку доступ к книге.

Что за ошибка? Что можно делать?

Только сейчас заметила что Office 2007 все нормально работает. А Office 2010 и 2013 такая ошибка получается.


может неустановлена библиотека


  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • Automation error. Разрушительный сбой

Return to VBA Code Examples

This tutorial will explain what a VBA Automation Error means and how it occurs.

Excel is made up of objects – the Workbook object, Worksheet object, Range object and Cell object to name but a few. Each object has multiple properties and methods whose behavior can be controlled with VBA code. If the VBA code is not correctly programmed, then an automation error can occur. It is one of the more frustrating errors in VBA as it can often pop up for no apparent reason when your code looks perfectly fine!

(See our Error Handling Guide for more information about VBA Errors)

Referring to a Variable no Longer Active

An Automation Error could occur when you are referring to a workbook or worksheet via a variable, but the variable is no longer active.

Sub TestAutomation()
  Dim strFile As String
  Dim wb As Workbook
'open file and set workbook variable
  strFile = Application.GetOpenFilename
  Set wb = Workbooks.Open(strFile)
'Close the workbook
  wb.Close
'try to activate the workbook
  wb.Activate
End Sub

When we run the code above, we will get an automation error.  This is due to the fact that we have opened a workbook and assigned a variable to that workbook. We have then closed the workbook but in the next line of code we try to activate the closed workbook.  This will cause the error as the variable is no longer active.

VBA AutomationError

If we want to activate a workbook, we first need to have the workbook open!

Memory Overload

This error can also sometimes occur if you have a loop and you forget to clear an object during the course of the loop. However, it might only occur sometimes, and not others-  which is one of the reasons why this error is can be so annoying.

Take for example this code below:

Sub InsertPicture()
  Dim i As Integer
  Dim shp As Object
  For i = 1 To 100
    With Worksheets("Sheet1")
'set the object variable
       Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
    End With
    With shp
     .Object.PictureSizeMode = 3
'load the picture
     .Object.Picture = LoadPicture("C:dataimage" & i & ".jpg")
     .Object.BorderStyle = 0
     .Object.BackStyle = 0
    End With
  Next i
End Sub

The variable is declared as an Object, and then the SET keyword is used to assign an image to the object. The object is then populated with an image and inserted into the Excel sheet with some formatting taking place at the same time.  We then add a loop to the code to insert 100 images into the Excel sheet. Occasionally this causes an automation error, but sometimes it doesn’t – frustrating, right?

The solution to this problem is to clear the object variable within the loop by setting the object to NOTHING – this will free the memory and prevent the error.

 Sub InsertPicture()
  Dim i As Integer
  Dim shp As Object
  For i = 1 To 100
    With Worksheets("Sheet1")
'set the object variable
     Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
    End With
    With shp
     .Object.PictureSizeMode = 3
'load the picture
     .Object.Picture = LoadPicture("C:dataimage.jpg")
     .Object.BorderStyle = 0
     .Object.BackStyle = 0
    End With
'clear the object variable
    Set shp = Nothing
  Next i
End Sub

DLL Errors and Updating Windows

Sometimes the error occurs and there is nothing that can be done within VBA code.  Re-registering DLL’s that are being used, making sure that our Windows is up to date and as a last resort, running a Registry Check as sometimes the only things that may work to clear this error.

A good way of avoiding this error is to make sure that error traps are in place using the On Error Go To or On Error Resume Next routines.

VBA Coding Made Easy

Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
vba save as

Learn More!

Ребята. И файлик у меня, благодаря более ранним советам бинарный, и наполнение формы уже практически на 98 % автоматизировано.
А вот перенести содержимое листов из одного файла в другой — практически невозможно. И дело даже не в объеме. Сами листы постоянно меняются.

Я просто научился жить с этой ошибкой. Возникает она строго когда меняется расположение/размер элемента на форме, которая
1. создана в 97 версии Excel
2. испытала по меньшей мере 48 модификаций (я версии считаю)
3. содержит пару сотен разных элементов.
4. испытала неоднократные нагрузки на основные элементы в тысячи и десятки тысяч записей

Я не говорю, что моя форма — великий и непогрешимый продукт моцга.
Она давно уже просится в отдельное приложение. Но пока я дорабатываю мелочи концепции — об отдельном приложении речи не идет.

То что xlsm — большая мусорка, я понимаю. Но сделать с этим пока ничего не могу. В файлах хls возникают проблемки с условным форматированием, некоторыми новыми функциями. От условного форматирования я планомерно ухожу. Но работы пока в этом направлении много. Индикация — важная вещь при экспресс-анализе непрерывно добавляющейся инфы.
А вот как уйти от функций СУММЕСЛИ, СЧЁТЕСЛИ и т.п.? Можно, конечно, наваять свою приблуду, но работать она будет заведомо и ощутимо медленнее. Доживу до SQL — буду выпендриваться.

Так что большинство советов я учитываю и использую. Они помогли мне в моем случае локализовать ошибку, условия ее возникновения, действия к ней приводящие, что мной и освещено здесь.

Добавлено через 2 часа 11 минут

Цитата
Сообщение от StepInLik
Посмотреть сообщение

6. На счет инфы со ссылкой и не лицензионным ПО не понял. Пожалуйста поясните.

Забыл совсем… прошу прощения. Если ПО нелицензионное (офис), то объективно возникает ошибка при подключении модуля, следящего за этим делом. Но у меня ошибка возникает и на лицензионном 2010 офисе (prof+). Так что ко мне это дело не относится. Ссылку здесь я привел, суммируя всё, что я нахожу или к чему прихожу сам по данному вопросу.

Добавлено через 5 минут

Цитата
Сообщение от StepInLik
Посмотреть сообщение

странно что он у вас вообще работает(и даже открывается) при (по всей видимости) таких объемах и будучи эксэмэльным (xlsx(m)

мои собственные проверки. Файл xlsm (2010-2013) работает и открывается при количестве строк 140 тыс. Файл еще работал, но у меня уже не открылся при количестве строки 730 тыс. Проблема была в нехватке оперативки. так что большой вопрос — а открылся ли файл. С таким монстром работать в excel почти невозможно (недопустимый износ нервов). поэтому дальше я не экспериментировал. Понятно, что мои задачи — задачи баз данных. Я сейчас отрабатываю концептуально программу обработки БД. Формировать БД и приложения, работающие с ней буду позже. И скорее всего с профильными спецами. Моя задача будет — грамотно формировать ТО с учетом ньюансов. Кто-б мне такой подарок в жизни сделал?!

Добавлено через 4 минуты

Цитата
Сообщение от StepInLik
Посмотреть сообщение

переносите не объекты (со всем мусором), а внешнее состояние объектов — т.е. содержимое, оформление, названия …

что имелось ввиду? копирование? как перенести форму? перерисовать?
я открываю VBA и драг-энд-дропом перетаскиваю формы, класс, модули из одного файла в другой. листы — копирую стандартным способом «переместить/копировать лист»

Добавлено через 1 минуту

Цитата
Сообщение от anton-sf
Посмотреть сообщение

с контролем создания и уничтожения объектов

я не уничтожаю и не создаю сами объекты на форме. Они созданы на этапе конструирования, позиционированы и отредактированы. Их наполнение — программное.
При редактировании элементов и возникает сбой.

Добавлено через 45 минут

Цитата
Сообщение от AndreA SN
Посмотреть сообщение

При редактировании элементов

имеется ввиду не программное наполнение, а редактирование элементов в конструкторе формы

One of the more frustrating errors to occur in VBA is the Automation Error.  It can often pop up for no apparent reason despite your code looking perfect.

Reasons for This Error

There are a variety of reasons that this can occur.

Microsoft Office is made up of Objects – the Workbook object, Worksheet Object, Range object and Cell object to name just a few in Excel; and the Document Object in Word.  Each object has multiple properties and methods that are able to be programmed to control how the object behaves. If you do not program these methods correctly, or do not set a property correctly, then an automation error can occur.

It can be highly annoying as the code will run perfectly for a while, and then suddenly you’ll see this!

Run-time error
Automation error
Unspecified error

You may get a number of different messages for this error.

The Object Has Disconnected from Its Client

An automation error could occur when you are referring to a workbook or worksheet via a variable, but the variable is no longer active.  Make sure any object variables that you are referring to in your code are still valid when you call the property and methods that you are controlling them with.

Excel Error Load Form

An automation error could occur within Excel if you load a form while another object (like the worksheet or range object) are still referenced.  Remember to set your object references to NOTHING after you have finished writing the code to control them with.

Error Hiding/Unhiding Sheets In Excel

There are 3 ways to control the visible property in an Excel sheet in VBA – xlSheetVisible, xlSheetHidden or xlSheetVeryHidden.   An automation error could occur if you are trying to write information to a sheet which has the xlVeryHidden property set – make sure you set the sheet to visible in the code before you try to write anything to the sheet using Visual Basic Code.

Error 429 and 440

If you receive either of these errors, it can mean that your DLL files or ActiveX controls that you might be using are not correctly registered on your PC, or if you are using an API incorrectly.  It can also occur if you are running using 32-bit files on a 64-bit machine, or vice versa. 

Automation Error When Running Macro Enabled Workbook Over A Network

If you have a workbook open over a network, and you get an automation error when you run a macro, check your network connections – it could be that the network path is no longer valid.   Check you network paths and connections and make sure that they are all still working.

ADODB Automation Error

This error can occur when you are programming within Microsoft Access and are using the ADODB.Connection object.  It can be caused by any number of reasons from conflicting DLL files to a registry corruption, or simply that you did not set the recordlist object to nothing when you were finished using it!

Common Causes and Things to Check

Here are some reasons you might be getting the error. Perhaps you are…

  • Trying to write information to hidden sheets or cells.
  • Trying to write information to other documents or workbooks.
  • Referring to objects that do not exist.
  • Needing to install an update to Office, or the correct .Net framework.
  • Loading objects (like pictures) into memory using a loop, and failing to clear the memory between each load (set Pic = Nothing).
  • A Corrupt Registry – this is a hard one, as it often means that you need to remove Office entirely from your machine and then re-install it.  

Ways to Solve It

Error Trapping

Error trapping is one of the best ways to solve this problem.  You can use On Error Resume Next – or On Error GoTo Label – depending on your needs at the time.  If you want the code to carry on running and ignore the error, use On Error Resume Next.  If you want the code to stop running, create an error label and direct the code to that error label by using On Error GoTo label.

Clear the Memory

Another way to solve the problem is to make sure you clear any referred objects either in a loop or at the end of your code.  For example, if you have referred to a picture object, set the picture object to NOTHING, or if you have referred to a Worksheet object, set the Worksheet object to NOTHING once you have run the code for that picture of worksheet.

The code example below will insert a picture into a worksheet.  It may or may not give you an automation error!

Sub InsertPicture()
	Dim i As Integer
	For i = 1 To 100
		With Worksheets("Sheet1")
 		Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", _
 		Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left
		, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
 		End With
		 With shp
			.Object.PictureSizeMode = 3
			.Object.Picture = LoadPicture("C:dataimage" &amp;amp; i &amp;amp; ".jpg")
			.Object.BorderStyle = 0
			.Object.BackStyle = 0
	 End With
	Next i
End Sub

The variable is declared as an OLEObject, and then the SET keyword is used to assign an image to the object.  The object is then populated with an image and inserted into the Excel sheet – some formatting taking place at the same time. I have then added a loop to the code to insert 100 images into the Excel sheet.  Occasionally this causes an automation error, but sometimes it doesn’t – frustrating, right?

The error often occurs when Excel runs out of memory – assigning an object over and over again without clearing the object could mean that Excel is struggling with memory and could lead to an automation error.

We can solve this problem 2 ways:

  1. Set the object to NOTHING after it is inserted each time
  2. Add an error trap to the code.
Sub InsertPicture()
On Error Resume Next
	Dim i As Integer
	For i = 1 To 100
		With Worksheets("Sheet1")
 		Set shp = .OLEObjects.Add(ClassType:="Forms.Image.1", _
 		Link:=False, DisplayAsIcon:=False, Left:=.Cells(i, "A").Left
		, Top:=.Cells(i, "A").Top, Width:=264, Height:=124)
 		End With
		 With shp
			.Object.PictureSizeMode = 3
			.Object.Picture = LoadPicture("C:dataimage" &amp;amp; i &amp;amp; ".jpg")
			.Object.BorderStyle = 0
			.Object.BackStyle = 0
	 End With
	Set shp = Nothing
	Next i
End Sub

Make sure your PC is up to date

A third way to solve the problem is to install the required update to Office or Windows, or the latest version of the .Net framework.  You can check to see if there are any updates available for your PC in your ‘Check for updates’ setting on your PC.

In Windows 10, you can type ‘updates’ in the search bar, and it will enable you to click on “Check for updates“.

Check for updates in Windows 10

It is always a good idea to keep your machine up to date.

Windows 10 is up to date

Run a Registry Check

If all else fails, there are external software programs that you can download to run a check on the registry of your PC.

As you can see from above, this error often has a mind of its own – and can be very frustrating to solve.  A lot of the times trial and error is required, however, writing clean code with good error traps and referring to methods, properties and objects correctly often can solve the problem.

  • Remove From My Forums
  • Вопрос

  • Hello,

    I found a VBA bug, after Excel 2016 update to latest version. Checked on 2007/2010/2013 Excel — this works fine. 

    Can someone confirm it’s not only me have this problem, and how this can be solved?

    Open Excel, write something in B5 cell. 

    In VBA write 3 lines:

    Sub ine()
        ActiveSheet.PrintPreview
    End Sub

    Then press RUN. It will open PrintPreview page of your Excel document. Then press button «Show Margins», and try to move margin on paper. You should encounter VBA Automation error.

    Adding screenshot: (Body text cannot contain images or links until we are able to verify your account.) I will add later :)

    And after Excel crashes. From windows logs got this:

    Faulting application name: EXCEL.EXE, version: 16.0.7369.2038, time stamp: 0x57f8d67c
    Faulting module name: EXCEL.EXE, version: 16.0.7369.2038, time stamp: 0x57f8d67c
    Exception code: 0xc0000005
    Fault offset: 0x0005bca2
    Faulting process id: 0x1d64
    Faulting application start time: 0x01d22851752c0b21
    Faulting application path: C:Program Files (x86)Microsoft OfficeRootOffice16EXCEL.EXE
    Faulting module path: C:Program Files (x86)Microsoft OfficeRootOffice16EXCEL.EXE
    Report Id: 1234cd8a-9448-11e6-9c35-74867a53b6c5
    Faulting package full name: 
    Faulting package-relative application ID: 

Ответы

    • Предложено в качестве ответа

      26 октября 2016 г. 6:23

    • Помечено в качестве ответа
      JuliusAST
      27 октября 2016 г. 11:42
  • Hi,

    You can also give a feedback via User Voice forum:

    https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application

    This forum is a way MS collect feedback from users.

    Hope it’s helpful.


    Regards,
    Emi Zhang
    TechNet Community Support

    Please remember to mark the replies as answers if they help and
    unmark them if they provide no help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.

    I did, can you give 3 votes?: https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/16722592-vba-activesheet-printpreview-automation-error-16-0

    • Предложено в качестве ответа
      Emi ZhangMicrosoft contingent staff
      26 октября 2016 г. 6:23
    • Помечено в качестве ответа
      Emi ZhangMicrosoft contingent staff
      28 октября 2016 г. 1:00

Понравилась статья? Поделить с друзьями:
  • Разрыв страницы в excel 2016
  • Разрешить только одну ячейку excel
  • Разрыв страницы excel это
  • Разрешить совместное редактирование excel
  • Разрыв страницы excel миф