Автоматическое изменение ссылок на библиотеки VBA (Microsoft Excel)
Марк находится в рабочей среде, в которой используются две версии Excel 2002 и 2003. Проблема возникает, когда он открывает книгу с помощью макроса в Excel 2003, который устанавливает библиотеку VB Office 11, а затем кто-то пытается открыть ту же самую книгу в Excel 2002, которая выдает ошибку при попытке запуска макроса, так как не может найти правильную ссылку на библиотеку VBA. Марк знает, что может вручную исправить это, перейдя в редактор VB и очистив ссылку на отсутствующую библиотеку VBA, но ему интересно, есть ли способ, чтобы книга автоматически проверяла версию Excel и соответствующим образом обновляла ссылку на библиотеку VBA.
Один из способов справиться с этим — создать и сохранить книгу с помощью более ранней версии Excel. Когда он открывается в более поздней версии Excel, ссылка на библиотеку VBA будет автоматически обновлена.
Excel выполняет обновления для более поздних версий, но не для более ранних версий.
Однако это означает, что даже если книга создается в более ранней версии Excel, после ее открытия и последующего сохранения в более поздней версии Excel у пользователей более ранней версии возникнут проблемы с ее открытием.
Решение, согласно некоторым источникам, состоит в том, чтобы прибегнуть к так называемому «позднему связыванию». Это просто означает, что макрос написан так, что он ищет определенные функции только во время выполнения, а не при сохранении макроса. Об этом немного говорится в следующей статье базы знаний Microsoft:
http://support.microsoft.com/?kbid=244167
Вы можете попробовать методы позднего связывания, открыв редактор VBA и удалив все ранее установленные ссылки. Затем добавьте код, подобный следующему, рядом с началом макроса:
If Application.Version = "10.0" Then 'Excel 2002 Dim oExcel As Object 'Apply late binding Set oExcel = CreateObject("Excel.Application") End If If Application.Version = "11.0" Then 'Excel 2003 ' ' Add whatever references you want for Excel 2003 ' End If
В конце макроса убедитесь, что вы установили для всех определенных объектов (например, oExcel) значение Nothing. Хороший пример кода, более надежного, чем тот, что представлен здесь, можно найти в следующих статьях:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=267 http://www.vbaexpress.com/kb/getarticle.php?kb_id=272
ExcelTips — ваш источник экономичного обучения Microsoft Excel.
Этот совет (3340) применим к Microsoft Excel 97, 2000, 2002 и 2003.