об OLE и VBA
Sep. 1st, 2012 12:57 pmЕсли вы изменили интерфейс ActiveX объекта, а в VBA IDE после пересборки проекта все показывается по старому, то не надо сразу биться головой об стену. А что надо - это убедиться, что изменения попали в Type Library, в которую смотрит VBA (меню Edit -> References).
Вначале стоит убедиться, что в .tlb файл (который порождается из .odl / .idl файла компилятором midl.exe) эти изменения попали. Это можно сделать, открыв его из OleView.Exe (File -> View TypeLib). Затем, если в tlb все ок, открыть так же .exe файл проекта (который и подключен в VBA) и убедиться, что там до сих пор старая версия интерфейса.
.tlb в .exe помещается компилятором ресурсов. Ссылка на .tlb находится в файле ресурсов (.rc2 в моем случае). Соответственно, если менялся файл описания интерфейсов (.odl / .idl), то надо перекомпилировать ресурсы, чтобы все заработало. Автоматическая такая зависимость почему-то отсутствует.
Наверное тому, кто с ActiveX плотно работает, это сообщение Капитана Очевидность. Но вот мне ActiveX приходится трогать эпизодически и я этого не знал.
Вначале стоит убедиться, что в .tlb файл (который порождается из .odl / .idl файла компилятором midl.exe) эти изменения попали. Это можно сделать, открыв его из OleView.Exe (File -> View TypeLib). Затем, если в tlb все ок, открыть так же .exe файл проекта (который и подключен в VBA) и убедиться, что там до сих пор старая версия интерфейса.
.tlb в .exe помещается компилятором ресурсов. Ссылка на .tlb находится в файле ресурсов (.rc2 в моем случае). Соответственно, если менялся файл описания интерфейсов (.odl / .idl), то надо перекомпилировать ресурсы, чтобы все заработало. Автоматическая такая зависимость почему-то отсутствует.
Наверное тому, кто с ActiveX плотно работает, это сообщение Капитана Очевидность. Но вот мне ActiveX приходится трогать эпизодически и я этого не знал.