Ошибка компиляции при открытии рабочей книги - PullRequest
3 голосов
/ 13 января 2012

У меня есть книга, которая использует определенный тип, назовем его T, который находится в модуле (DLL), определенном в моих ссылках - все хорошо.

Я создал некоторый код, который вызывается в Workbook_Open ()это добавит ссылку на DLL, если ее еще нет в списке ссылок.Это значит, что я могу дать рабочую книгу кому-то, и им не придется заниматься созданием ссылки вручную.

Моя проблема в том, что при открытии книги (двойной щелчок) перед Workbook_Open ()выполняется (и Refence может быть установлен), меня бросают в отладчик, который указывает и жалуется, что тип T, определенный в еще не упомянутой DLL, не определен.Ну, не шучу, это не так.

Кажется, это маленький цыпленок и яйцо.Кто-нибудь видел это раньше?Как вы это исправили?

1 Ответ

1 голос
/ 10 февраля 2012

Как уже говорили другие люди, если вы не собираетесь добавлять ссылку на DLL до Workbook_Open, вы должны использовать позднюю привязку для подключения к содержимому в DLL.

Тем не менее, я думаю, что вы делаете это неправильно. Вместо добавления ссылки на DLL в Workbook_Open сделайте ссылку на нее и установите вместо нее .IsBroken. Тогда у вас может быть код, который сделает все, что нужно для исправления неработающей ссылки.

Это сохраняет преимущество раннего связывания, и вы не получите такого же рода ошибок компиляции, если ссылка на DLL не работает.

ПРИМЕЧАНИЕ : Вы все еще можете получить ошибки компиляции, но они не будут относиться к отсутствующей DLL. Несмотря на то, что у вас неверная ссылка, любое использование функций из модуля VBA Strings вызовет ошибку компиляции, если функция не имеет префикса Strings. Например, следующий код вызовет ошибку компилятора до запуска Workbook_Open если у вас есть неработающие ссылки.

Private Sub Workbook_Open()
   Dim r As Reference
   For Each r In ThisWorkbook.VBProject.References
      If r.IsBroken Then
         MsgBox "Found broken reference." & vbCrLf _
              & Mid(r.FullPath, InStrRev(r.FullPath, "\") + 1)
      End If
   Next r
End Sub

Чтобы исправить, префикс Mid и InStrRev с Strings..

MsgBox "Found broken reference." & vbCrLf _
     & Strings.Mid(r.FullPath, Strings.InStrRev(r.FullPath, "\") + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...