Lost your password?


Хитрости »
Основные понятия (27)
Сводные таблицы и анализ данных (10)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (23)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (68)
Разное (43)
Баги и глюки Excel (5)

Ошибка - Cant find project or library

Представим себе ситуацию - вы написали макрос и кому-то выслали. Макрос хороший, нужный, а главное - рабочий. Вы сами проверили и перепроверили. Но тут вам сообщают - Макрос не работает. Выдает ошибку - Can't find project or library. Вы запускаете файл - нет ошибки. Перепроверяете все еще несколько раз - нет ошибки и все тут. Как ни пытаетесь, даже проделали все в точности как и другой пользователь - а ошибки нет. Однако у другого пользователя при тех же действиях ошибка не исчезает. Переустановили офис, но ошибка так и не исчезла - у вас работает, у них нет.
Или наоборот - Вы открыли чей-то чужой файл и при попытке выполнить код VBA выдает ошибку Can't find project or library.
Почему появляется ошибка: как и любой программе, VBA нужно иметь свой набор библиотек и компонентов, посредством которых он взаимодействует с Excel(и не только). И в разных версиях Excel эти библиотеки и компоненты могут различаться. И когда вы делаете у себя программу, то VBA(или вы сами) ставит ссылку на какой-либо компонент либо библиотеку, которая может отсутствовать на другом компьютере. Вот тогда и появляется эта ошибка. Что же делать? Все очень просто:

  1. Открываем редактор VBA
  2. Идем в Tools -References
  3. Находим там все пункты, напротив которых красуется MISSING.

    Снимаем с них галочки
  4. Жмем Ок
  5. Сохраняем файл

Эти действия необходимо проделать, когда выполнение кода прервано и ни один код проекта не выполняется. Возможно, придется перезапустить Excel. Что самое печальное: все это надо проделать на том ПК, на котором данная ошибка возникла. Это не всегда удобно. А поэтому лично я рекомендовал бы не использовать сторонние библиотеки и раннее связывание, если это не вызвано необходимостью
Чуть больше узнать когда и как использовать раннее и позднее связывание можно из этой статьи: Как из Excel обратиться к другому приложению.
Всегда проверяйте ссылки в файлах перед отправкой получателю. Оставьте там лишь те ссылки, которые необходимы, либо которые присутствуют на всех версиях. Смело можно оставлять следующие(это касается именно VBA -Excel):

  • Visual Basic for application (эту ссылку отключить нельзя)
  • Microsoft Excel XX.0 Object Library (место X версия приложения - 12, 11 и т.д.). Эту ссылку нельзя отключить из Microsoft Excel
  • Microsoft Forms X.0 Object Library. Эта ссылка подключается как руками, так и автоматом при первом создании любой UserForm в проекте. Однако отключить её после подключения уже не получится
  • OLE Automation. Хотя она далеко не всегда нужна - не будет лишним, если оставить её подключенной. Т.к. она подключается автоматически при создании каждого файла, то некоторые "макрописцы" используют методы из этой библиотеки, даже не подозревая об этом, а потом не могут понять, почему код внезапно отказывается работать(причем ошибка может быть уже другой - вроде "Не найден объект либо метод")

Может я перечислил не все - но эти точно имеют полную совместимость между разными версиями Excel.

Если все же по какой-то причине есть основания полагать, что в библиотеках могут появиться "битые" ссылки MISSING, можно автоматически найти "битые" ссылки на такие библиотеки и отключить их нехитрым макросом:

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

Но для работы этого макроса необходимо:

  1. проставить доверие к проекту VBA:
    Excel 2010-2019 - Файл -Параметры -Центр управления безопасностью-Параметры макросов-поставить галочку "Доверять доступ к объектной модели проектов VBA"
    Excel 2007 - Кнопка Офис-Параметры Excel-Центр управления безопасностью-Параметры макросов-поставить галочку "Доверять доступ к объектной модели проектов VBA"
    Excel 2003- Сервис - Параметры-вкладка Безопасность-Параметры макросов-Доверять доступ к Visual Basic Project
  2. проект VBA не должен быть защищен

И главное - всегда помните, что ошибка Can't find project or library может появиться до запуска кода по их отключению(Remove_MISSING). Все зависит от того, что и как применяется в коде и в какой момент идет проверка на "битые" ссылки.

Так же Can't find project or library возникает не только когда есть "битая" библиотека, но и если какая-либо библиотека, которая используется в коде, не подключена. Тогда не будет MISSING. И в таком случае будет необходимо определить в какую библиотеку входит константа, объект или свойство, которое выделяет редактор при выдаче ошибки, и подключить эту библиотеку.
Например, есть такой кусок кода:

Sub CreateWordDoc()
    Dim oWordApp As Word.Application
    Set oWordApp = New Word.Application
    oWordApp.Documents.Add

если библиотека Microsoft Excel XX.0 Object Library(вместо XX версия приложения - 11, 12, 16 и т.д.) не подключена, то будет подсвечена строка oWordApp As Word.Application. И конечно, надо будет подключить соответствующую библиотеку.
Если используются какие-либо методы из библиотеки и есть вероятность, что библиотека будет отключена - можно попробовать проверить её наличие кодом и либо выдать сообщение, либо подключить библиотеку(для этого надо будет либо знать её GUIDE, либо полный путь к ней на конечном ПК).
На примере стандартной библиотеки OLE Automation(файл библиотеки называется stdole2) приведу коды, которые помогут проверить наличие её среди подключенных и либо показать сообщение либо сразу подключить.
Выдать сообщение - нужно в случаях, если не уверены, что можно вносить подобные изменения в 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 ссылки статистика
Обсуждение: 48 комментариев
  1. Bolgarin:

    Огромное спасибо!!!
    Вчера почти целый день воевал с этим Can’t find project or library!!!
    На форумах фигню всяку пишут. А тут всё просто и понятно!!!
    Еще раз огромное спасибо!!!

  2. Александр:

    Да спасибо большое полностью согласен с предыдущим комментарием! Нужно было сразу так запрос поставить в поиске! Все работает! Я знал, что это пустяковая проблема но не знал как её решить. Спасибо этому сайту!

  3. Kyra:

    Поправка:
    "Microsoft Excel XX.0 Object Library" - не знаю, как с Excel XX, но у меня только что не хотел работать написанный в Excel макрос (под одними и теми же операционками, под одними и теми же офисами) из-за Microsoft Word 12.0 Object Library, так что их полная совместимость всё-таки под вопросом.

  4. Правильно. Потому что для Excel библиотека Word является сторонней. Т.е. подключаемой извне. Так же как в данном случае будет и с библиотекой Excel, если работаете в Word-е. Почему так. Потому что запуская Excel Вы не можете работать в VBA без подключенной к нему библиотеке «Microsoft Excel XX.0 Object Library» и автоматом подключается та библиотека Excel, которая доступна из запущенной версии Excel.

  5. большое спасибо! Очень доступно написано! Сработало даже с вба в solidworks!

  6. Денис:

    Спасибо огромное!
    очень досупно и по существу

  7. Георгий:

    Может я краб-криворукий, но я никак не могу найти пункты, напротив которых красуется MISSING.

  8. Георгий - а с чего Вы взяли, что они у Вас обязательно должны быть?

  9. Георгий:

    @Дмитрий(Админ)
    Ну исходя из Вашего поста.
    У меня просто при открытии екселя первым делом выскакивает сообщение "could not load an object because it is not available on this machine" Вот и ищу пути возможного решения.

  10. Георгий, а Вас не смутило, что статья совершенно про другую ошибку? Какое отношение она должна иметь к Вашей проблеме?
    У Вас проблема в том, что в книге, которую Вы загружаете, используется компонент, который отсутствует на Вашем ПК и поэтому не может быть загружен. Вам необходимо узнать, что это за объект, в какой библиотеке типов содержится, скачать эту библиотеку и зарегистрировать на ПК.

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2024 Excel для всех   Войти