Ошибка - Cant find project or library
Представим себе ситуацию - вы написали макрос и кому-то выслали. Макрос хороший, нужный, а главное - рабочий. Вы сами проверили и перепроверили. Но тут вам сообщают -
Или наоборот - Вы открыли чей-то чужой файл и при попытке выполнить код VBA выдает ошибку
- Открываем редактор VBA
- Идем в
Tools -References - Находим там все пункты, напротив которых красуется
MISSING .
Снимаем с них галочки - Жмем Ок
- Сохраняем файл
Эти действия необходимо проделать, когда выполнение кода прервано и ни один код проекта не выполняется. Возможно, придется перезапустить Excel.
Всегда проверяйте ссылки в файлах перед отправкой получателю. Оставьте там лишь те ссылки, которые необходимы, либо которые присутствуют на всех версиях. Смело можно оставлять следующие(это касается именно VBA -Excel):
Visual Basic for application (эту ссылку отключить нельзя)Microsoft Excel XX.0 Object Library (место X версия приложения - 12, 11 и т.д.). Эту ссылку нельзя отключить из Microsoft ExcelMicrosoft Forms X.0 Object Library. Эта ссылка подключается как руками, так и автоматом при первом создании любой UserForm в проекте. Однако отключить её после подключения уже не получитсяOLE Automation . Хотя она далеко не всегда нужна - не будет лишним, если оставить её подключенной. Т.к. она подключается автоматически при создании каждого файла, то некоторые "макрописцы" используют методы из этой библиотеки, даже не подозревая об этом, а потом не могут понять, почему код внезапно отказывается работать(причем ошибка может быть уже другой - вроде "Не найден объект либо метод")
Может я перечислил не все - но эти точно имеют полную совместимость между разными версиями Excel.
Если все же по какой-то причине есть основания полагать, что в библиотеках могут появиться "битые" ссылки
Sub Remove_MISSING() Dim oReferences As Object, oRef As Object Set oReferences = ThisWorkbook.VBProject.References For Each oRef In oReferences 'проверяем, является ли эта библиотека сломанной - MISSING If (oRef.IsBroken) Then 'если сломана - отключаем во избежание ошибок oReferences.Remove Reference:=oRef End If Next End Sub |
Но для работы этого макроса необходимо:
- проставить доверие к проекту VBA:
Excel 2010-2019 - Файл -Параметры -Центр управления безопасностью-Параметры макросов-поставить галочку "Доверять доступ к объектной модели проектов VBA"
Excel 2007 - Кнопка Офис-Параметры Excel-Центр управления безопасностью-Параметры макросов-поставить галочку "Доверять доступ к объектной модели проектов VBA"
Excel 2003- Сервис - Параметры-вкладка Безопасность-Параметры макросов-Доверять доступ к Visual Basic Project - проект VBA не должен быть защищен
И главное - всегда помните, что ошибка
Так же
Например, есть такой кусок кода:
Sub CreateWordDoc() Dim oWordApp As Word.Application Set oWordApp = New Word.Application oWordApp.Documents.Add |
если библиотека
Если используются какие-либо методы из библиотеки и есть вероятность, что библиотека будет отключена - можно попробовать проверить её наличие кодом и либо выдать сообщение, либо подключить библиотеку(для этого надо будет либо знать её GUIDE, либо полный путь к ней на конечном ПК).
На примере стандартной библиотеки
Выдать сообщение - нужно в случаях, если не уверены, что можно вносить подобные изменения в VBAProject(например, если он защищен паролем):
Sub CheckReference() Dim oReferences As Object, oRef As Object, bInst As Boolean Set oReferences = ThisWorkbook.VBProject.References 'проверяем - подключена ли наша библиотека или нет For Each oRef In oReferences If LCase(oRef.Name) = "stdole" Then bInst = True Next 'если не подключена - выводим сообщение If Not bInst Then MsgBox "Не установлена библиотека OLE Automation", vbCritical, "Error" End If End Sub |
Если уверены, что можно вносить изменения в VBAProject - то удобнее будет проверить наличие подключенной библиотеки "OLE Automation" и сразу подключить её, используя полный путь к ней(на большинстве ПК этот путь будет совпадать с тем, что в коде):
Sub CheckReferenceAndAdd() Dim oReferences As Object, oRef As Object, bInst As Boolean Set oReferences = ThisWorkbook.VBProject.References 'проверяем - подключена ли наша библиотека или нет For Each oRef In oReferences Debug.Print oRef.Name If LCase(oRef.Name) = "stdole" Then bInst = True Next 'если не подключена - подключаем, указав полный путь и имя библиотеки на ПК If Not bInst Then ThisWorkbook.VBProject.References.AddFromFile "C:\Windows\System32\stdole2.tlb" End If End Sub |
Так же см.:
Что необходимо для внесения изменений в проект VBA(макросы) программно
Как защитить проект VBA паролем
Как программно снять пароль с VBA проекта?
Статья помогла? Поделись ссылкой с друзьями!
Поиск по меткам
Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистикаКомментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум
Файл сохранила, закрыла. Сохранила, закрыла Excel полностью. Открыла файл и попробовала. Дело в том что, на компе стоит Excel Starter 2010, и в эксел выходит сообщение выполнение макросов не поддерживает. Наверно из-за этого и не работает ничего
Помог 1ый способ, огромное спасибо!
Добрый день. У меня следующая ситуация: открываю редактор VBA, иду в Tools, а References - неактивно, не могу его открыть. Что это означает и как решать проблему в этом случае?
Неактивный пункт References означает:
-проект VBA защищен. Решение: снять защиту и повторить попытку;
-в данный момент код выполняется или находится в режиме отладки. Решение: нажать на синий квадратик на панели. Если его него то через меню: Run->Reset.
ОГРОМНОЕ спасибище и за статью, и за этот совет
сделала как написано. помогло. ошибка у меня была в календаре. супер. большое спасибо.
Добрый вечер . При открытии формы выдает ошибку :Automation error Неопознанная ошибка. На работе файл открывается ,а дома не хочет. При сохранении :Ошибка документ не сохранен.
А у меня проблема в том, что в Excele используется библиотека Worda для экспорта данных из Excel в Word
И этот макрос запускается как в 2003 так и в 2007 Excele
после сохранения в .xls в 2007 Excele в Reference подставляется Word 12 Object Libbary, которая в Excele 2003 естественно MISSING
я хотела уточнить, если я уберу ошибочную библиотеку с помощью Вашей процедуры Sub Remove_MISSING(), то автоматически не подключится Word 11 Object Libbary для 2003 Excel? Word 11 Object Libbary надо будет так же в макросе подключить ?
заранее признательна!
Ингрида, я бы посоветовал использовать позднее связывание и обращаться к Word так, как я описывал в этой статье:Как из Excel обратиться к другому приложению
Тогда не придется мучаться с отключением/подключением библиотек.
большое спасибо !!!!!
Спасибо огромное.
Мучался целый день с объектом
ThisWorkbook.VBProject.References
Оказывается надо было всего-то поставить "Доверять доступ у VBProject
Теперь все работает