2

AutoCAD用のVBA(Visual Basic for Applications)スクリプトを書いています。Autocadをグラフィカルエンジンとして使用し、Excelを使用して結果を表示します。

問題は、一部のユーザーがExcel 2003を使用していて、他のユーザーがExcel2007を使用していることです。

VBAからExcel2003を使用するC:\Program Files\Microsoft office\Office12\excel.exeには、プロジェクトを参照する必要があります。ただし、Excel 2007を使用するには、を参照する必要があります...\Office14\excel.exe

知らない人のために、参照とは何か:プロジェクトのプロパティ内で永続的に実行する必要があるため、プログラムで2つのファイルのどちらがコンピューターに存在し、実行時に参照するかをプログラムで判断することはできません。わからない、どうやって?

ファイル名が同じであるため、両方のファイルを一度に参照することもできません。

4

3 に答える 3

3

遅延バインディング(IDispatch)を使用する必要があります。VBAのCreateObjectメソッドを呼び出して、Excelアプリオブジェクトを作成します。これは、インストールされているバージョンを使用します。

遅延バインディングを使用すると、IntelliSenseの利便性が失われます。

Excelのバージョンが異なれば、機能も異なり、場合によっては、同じ機能を異なる方法で実装することもあります。したがって、必ず両方のバージョンに対してテストしてください。一部の場所では、バージョンごとに異なるコードが必要になる場合があります。

于 2011-03-18T12:38:50.200 に答える
2

遅延バインディング、つまりどちらも参照せず、すべてを「オブジェクト」として宣言し、CreateObjectを使用してインスタンスをインスタンス化する必要があります。

これは、(初期バインドされた)参照を使用してコーディングし、後で変数宣言を変更して参照を削除できるほど難しくはありません。異なるバージョンの問題のため、Excelに対してコーディングする場合は非常に一般的です。

バージョン間でAPIまたは機能の動作に変更があった場合は、両方に対して徹底的にテストする必要があることに注意してください。

于 2011-03-18T12:34:39.953 に答える
1

AutoCAD用の新しいコードを書いているのなら、私は.NETに行くことを真剣に検討します。オートデスクはVBAのサポートを段階的に廃止しています-AutoCADの最後の2つ(まもなく3つになる)バージョンには自動的に含まれていません: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-migration-basicsに、移行ガイドへのリンクがいくつかあります。 html。ボーナスとして、これらのスキルは、将来、そして現在、VBAよりもAutoCAD開発以外ではるかに価値があります。

.NETコードはODAでもサポートされているため、ライブラリを使用してAutoCADアドオンをスタンドアロンアプリに移植するのは(ちょっと)簡単です。

また、これで問題を解決できる可能性があります。参照は、VisualStudio.NETプロジェクトでプログラムで管理できます。

于 2011-03-20T09:58:28.360 に答える