Ссылка на Excel 2003 и 2007 в проекте Autocad-VBA - PullRequest
2 голосов
/ 18 марта 2011

Я пишу сценарий VBA (Visual Basic для приложений) для AutoCAD. Он использует Autocad в качестве графического движка и Excel для отображения результатов ....

Проблема в том, что некоторые пользователи используют Excel 2003, а другие - Excel 2007.

Чтобы использовать Excel 2003 из VBA, я должен сослаться C:\Program Files\Microsoft office\Office12\excel.exe на проект. Но чтобы использовать Excel 2007, я должен ссылаться на ...\Office14\excel.exe.

Для людей, которые не знают, что такое ссылка: это должно быть сделано постоянно в рамках свойств проекта, поэтому я не могу программно решить, какой из этих двух файлов существует на компьютере, и ссылаться на них во время выполнения .... или, может быть, я просто не знаю, как?

Я даже не могу сослаться на оба файла одновременно, потому что они имеют одинаковые имена файлов.

Ответы [ 3 ]

3 голосов
/ 18 марта 2011

Вам нужно будет использовать позднюю привязку (IDispatch). Создайте объект приложения Excel, вызвав метод VBA CreateObject. Это будет использовать любую установленную версию.

При позднем связывании у вас не будет удобства IntelliSense.

Различные версии Excel имеют разные функции, а в некоторых случаях даже реализуют одну и ту же функцию по-разному. Так что не забудьте проверить обе версии. В некоторых местах вам может потребоваться разный код для разных версий.

2 голосов
/ 18 марта 2011

Вам необходимо позднее связать, то есть не ссылаться ни на что, объявить все как «объект» и использовать CreateObject для создания экземпляров.

Это не так сложно, так как вы можете кодировать со ссылкой (ранняя граница), а затем просто изменить объявления переменных и удалить ссылку. Это часто встречается при кодировании против Excel из-за проблем разных версий.

Обратите внимание, что вы должны тщательно проверить оба случая, если между версиями произошли изменения в API или функциональном поведении.

1 голос
/ 20 марта 2011

Если вы пишете новый код для AutoCAD, я бы серьезно посмотрел на переход на .NET.Autodesk постепенно отказывается от поддержки VBA - она ​​не была автоматически включена в последние 2 (скоро будет 3) версии AutoCAD: http://withoutanet.typepad.com/without_a_net/2009/04/vba-in-autocad-2010.html

По мере обновления пользователями новых версий будутдля них еще больше проблем с использованием дополнений VBA.LISP и ARX никуда не денутся в ближайшие несколько лет, поскольку многие команды AutoCAD написаны на этих языках.

Даже если вы поддерживаете существующий код, я думаю, вам следует серьезно заняться переходом на технологию, котораяAutoCAD поддержит в ближайшее время.У меня есть довольно много инструментов, которые я написал в VBA, которые я перестал поддерживать (читать - заброшен) и теперь переписываю в .NET.Переход от VBA к VB не является квантовым.Лично я сейчас предпочитаю C #, но это полностью личный выбор.Языки эквивалентны по своей функциональности.Есть несколько ссылок на руководства по миграции по ссылке выше и на http://through -the-interface.typepad.com / through_the_interface / 2010/02 / updated-devtv-autocad-vba-to-vbnet-миграция-основы.html .В качестве бонуса эти навыки будут гораздо более ценными вне разработки AutoCAD, чем VBA в будущем, и теперь.

.NET-код также поддерживается ODA, поэтому его (вроде) легко переносить надстройки AutoCAD.к автономному приложению, использующему их библиотеку.

Кроме того, это может решить вашу проблему - ссылками можно управлять программно в проекте Visual Studio .NET.

...