В этом руководстве объясняется, что означает ошибка автоматизации VBA и как она возникает.
Excel состоит из объектов - объекта Workbook, объекта Worksheet, объекта Range и объекта Cell и многих других. Каждый объект имеет несколько свойств и методов, поведением которых можно управлять с помощью кода VBA. Если код VBA запрограммирован неправильно, может возникнуть ошибка автоматизации. Это одна из самых неприятных ошибок в VBA, поскольку она часто может всплывать без видимой причины, когда ваш код выглядит идеально!
(Дополнительную информацию об ошибках VBA см. В нашем Руководстве по обработке ошибок)
Ссылка на переменную, которая больше не активна
Ошибка автоматизации может возникнуть, когда вы обращаетесь к книге или листу через переменную, но эта переменная больше не активна.
1234567891011 | Sub TestAutomation ()Dim strFile As StringDim wb As Workbook'открыть файл и установить переменную книгиstrFile = Application.GetOpenFilenameУстановите wb = Workbooks.Open (strFile)'Закройте книгуwb.Close'попробуйте активировать книгуwb.ActivateКонец подписки |
Когда мы запустим приведенный выше код, мы получим ошибку автоматизации. Это связано с тем, что мы открыли книгу и присвоили ей переменную. Затем мы закрыли книгу, но в следующей строке кода пытаемся активировать закрытую книгу. Это вызовет ошибку, поскольку переменная больше не активна.
Если мы хотим активировать книгу, нам сначала нужно открыть книгу!
Перегрузка памяти
Эта ошибка также может иногда возникать, если у вас есть цикл, и вы забыли очистить объект во время цикла. Однако это может происходить только иногда, а не другие, что является одной из причин, по которой эта ошибка может быть настолько раздражающей.
Возьмем, к примеру, следующий код:
1234567891011121314151617 | Sub InsertPicture ()Dim i как целое числоDim shp как объектДля i = от 1 до 100С листами («Лист1»)'установить переменную объектаУстановите shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Верх, ширина: = 264, высота: = 124)Конец сС шп.Object.PictureSizeMode = 3'загрузить картинку.Object.Picture = LoadPicture ("C: \ data \ image" & i & ".jpg").Object.BorderStyle = 0.Object.BackStyle = 0Конец сДалее яКонец подписки |
Переменная объявляется как объект, а затем УСТАНОВЛЕННЫЙ ключевое слово используется для присвоения изображения объекту. Затем объект заполняется изображением и вставляется в лист Excel, при этом одновременно происходит некоторое форматирование. Затем мы добавляем цикл в код для вставки 100 изображений в лист Excel. Иногда это вызывает ошибку автоматизации, но иногда нет - неприятно, правда?
Решение этой проблемы - очистить объектную переменную внутри цикла, установив для объекта значение НИЧЕГО ТАКОГО - это освободит память и предотвратит ошибку.
12345678910111213141516171819 | Sub InsertPicture ()Dim i как целое числоDim shp как объектДля i = от 1 до 100С листами («Лист1»)'установить переменную объектаУстановите shp = .OLEObjects.Add (ClassType: = "Forms.Image.1", Link: = False, DisplayAsIcon: = False, Left: =. Cells (i, "A"). Left, Top: =. Cells ( i, "A"). Верх, ширина: = 264, высота: = 124)Конец сС шп.Object.PictureSizeMode = 3'загрузить картинку.Object.Picture = LoadPicture ("C: \ data \ image.jpg").Object.BorderStyle = 0.Object.BackStyle = 0Конец с'очистить объектную переменнуюУстановить shp = NothingДалее яКонец подписки |
Ошибки DLL и обновление Windows
Иногда возникает ошибка, и в коде VBA ничего нельзя сделать. Повторная регистрация используемых DLL, обеспечение актуальности нашей Windows и, в крайнем случае, запуск проверки реестра, как иногда единственное, что может помочь устранить эту ошибку.
Хороший способ избежать этой ошибки - убедиться в наличии ловушек ошибок с помощью При ошибке Перейти к или При ошибке Возобновить Далее рутины.