Архив

Публикации с меткой ‘Не работает макрос’

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

 

Вы сами написали макрос и кому-то выслали. Макрос хороший и рабочий. Вы сами проверили и перепроверили. Но тут Вам сообщают — «Макрос не работает«. Выдает ошибку — 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 не должен быть защищен.

Почему не работает макрос?

 

Вы скачали файл с данного сайта с примером макроса, но он не работает! Как? Неужели автор сайта выложил неработающий пример и не знает об этом? Или Вы где-то нашли код макроса, вставили его куда положено(в модуль) — но не работает… Почему? Ведь вставили все правильно, да и другие люди пишут — отличный макрос, здорово работает. Работает. У всех, кроме Вас. И Вы начинаете задумываться: «А чем же я и мой Excel такие особенные?». А ответ может быть прост — Вы перед выполнением макроса не разрешили эти самые макросы. По умолчанию выполнение макросов в Excel отключено. Значит их надо включить. Для этого:

  • для Excel 2003:
    Сервис-Безопасность-Уровень макросов «Низкий»
  • для Excel 2007:
    Меню-Параметры Excel-Центр управления безопасностью-Параметры центра управления безопасностью-Параметры макросов-Разрешить все макросы.

Закройте Excel(полностью, а не один файл. Это обязательно — только после перезагрузки Excel изменения параметров безопасности вступят в силу). Откройте Excel. Все, теперь Вы можете наслаждаться работой макроса.

Если макросы у Вас включены, но некоторые макросы отказываются работать(те макросы, которые записаны в модулях листов и книг; те, которые отвечают за отслеживание событий — Worksheet_SelectionChange, Worksheet_Change и т.п.), то дело может быть в том, что Вы выполняли какой-нибудь макрос и он отключил отслеживание событий. Тогда надо вставить в обычный модуль приведенный ниже код и выполнить его:

Sub Reset_Events()
    Application.EnableEvents = True
End Sub
Sub Reset_Events()
    Application.EnableEvents = True
End Sub

Так же см.:
Управление безопасностью макросов