Версия для печати

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

Что умеет Excel

 

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

  1. Открываете редактор VBA
  2. Идете в Tools-References
  3. Находите там все пункты, напротив которых красуется MISSING. Снимаете с них галочки.
  4. Жмете Ок.
  5. Сохраняете файл.

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

  • Visual Basic for application(эту ссылку Вы попросту не сможете отключить);
  • Microsoft Excel XX.0 Object Library(вместо X версия приложения — 12, 11 и т.д.)-эту ссылку Вы не сможете отключить;
  • Microsoft Forms X.0 Object Library(эту ссылку Вы не сможете отключить);
  • OLE Automation(хотя она тоже не нужна -  но и вреда никакого).

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

Еще, для автоматического поиска и отключения ошибочных ссылок на такие библиотеки можно делать и макросом:

Sub Remove_MISSING()
    Dim oReferences As Object, oRef As Object
    Set oReferences = ThisWorkbook.VBProject.References
    For Each oRef In oReferences
        If (oRef.IsBroken) Then oReferences.Remove Reference:=oRef
    Next
End Sub
Sub Remove_MISSING()
    Dim oReferences As Object, oRef As Object
    Set oReferences = ThisWorkbook.VBProject.References
    For Each oRef In oReferences
        If (oRef.IsBroken) Then oReferences.Remove Reference:=oRef
    Next
End Sub

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

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


Поддержать автора сайта
Поделиться ссылкой
  1. Bolgarin
    9 Ноябрь 2011 в 06:45 | #1

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

  2. Александр
    25 Ноябрь 2011 в 11:31 | #2

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

  3. Kyra
    7 Декабрь 2011 в 14:33 | #3

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

  4. 7 Декабрь 2011 в 15:56 | #4

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

  5. 21 Декабрь 2011 в 09:14 | #5

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

  6. Денис
    28 Декабрь 2011 в 14:17 | #6

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

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