VBA: Early binding issue

VBA: Early binding issue

Три дня провозился с одной проблемой с крайне неочевидным решением. В Excel 2010, пытаясь с помощью VBA соединиться с проектом(-ами) в Project 2007 (с MS Project 2010 не проверял за неимением оного) и вытащить оттуда необходимые данные, каждый раз при обращении к любому объекту получал сообщение об ошибке “Automation Error: Library is not registered”. Сначала думал, что это из-за проблем с разными версиями, хотя, и я много раз уже это делал, это не принципиально. Достаточно подключить нужную библиотеку в Tools –> References в окне Excel.

Проблема, как оказалось, была в так называемом раннем связывании/описании объекта и характерна, насколько я понял, погуглив в интернете, для MS Project, причем, начиная аж с версии 98 (!!!). На дворе 2012 год, а бага так и не исправлена.

Итак, вот пример исходного кода, который приводит к этой ошибке:

Dim appPrj As MSProject.Application
Dim aPrj As MSProject.Project
Set appPrj = CreateObject(“MSProject.Application”)
Set aPrj = appPrj.ActiveProject
….
n = aPrj.Tasks.Count ‘ тут возникает ошибка

Раннее связывание или другими словами присвоение типа объекта и вызывает данную ошибку, и чтобы она не появлялась придется немного переписать код:

Dim appPrj As Object ‘ MSProject.Application
Dim aPrj As Object ‘ MSProject.Project
Set appPrj = CreateObject(“MSProject.Application”)
Set aPrj = appPrj.ActiveProject
….
n = aPrj.Tasks.Count ‘ ошибки нет

Все бы ничего, если не одно НО. В этом случае при написании кода не всплывают списки полей, методов и свойств объектов MSProject, что снижает скорость написания кода. В общем очень неудобно, приходится сначала, пока пишешь код, делать это самое раннее связывание, потом при запуске макроса, заменять на общий тип Object.

Share

Leave a Reply

Your email address will not be published. Required fields are marked *