お世話になっております。
AutoCAD2022 VBA の AcadLayerStateManager の指定について質問があります。
「AutoCAD2022 API ヒストリ リファレンス(ActiveX)」(添付「AutoCAD 2022 API ヒストリ リファレンス(ActiveX).png」)には、「AutoCAD2022、AutoCAD2021 の両方がインストールされている場合を考慮して、クラスのマイナーバージョンまで指定しろ」と記述されていると理解しましたが、
「概要 - 画層設定を保存する(VBA/ActiveX)」(添付「概要 - 画層設定を保存する(VBA ActiveX).png」)の例では、
"AutoCAD.AcadLayerStateManager." & Left(AcadApplication.Version, 2)
となっていますが、マイナーバージョンを指定しなくても問題無いでしょうか?
実際にテストプログラムを作成し、実行してみると、実行時エラーとなってしまいます。
・"AutoCAD.AcadLayerStateManager.24.1" ← マイナーバージョンを指定すると実行時エラーが発生する
・"AutoCAD.AcadLayerStateManager." & Left(CStr(AcadApplication.Version), 2) ← マイナーバージョンを指定しないと正常に動作する。
AutoCAD2022、AutoCAD2021 の両方がインストールされている場合、マイナーバージョンを指定しなくても問題にならないでしょうか?(実際の運用環境では、AutoCAD2022だけしかインストールされていないので問題は発生しないと思いますが、確認したかったので質問しました。)
※添付「Test01_dvb.doc」はテスト用プログラムですが、".dvb"は添付できなかった為、".doc"としました。
解決済! 解決策の投稿を見る。
回答者: kazk.o. 解決策の投稿を見る。
ちょっとややこしいのでうまく説明できるか不安なんですが
まずSatoshi_Igarashiさんがマイナーバージョンと記載しているのは「ProgID」とした方が良いと思われますので申し訳ないのですがそのようにご理解して頂けたらと思います。
AutoCAD2022 API ヒストリ リファレンスの方に記載されているのはAUTOCAD自体にアクセスするためのクラス「AcadApplication」への変更点であって
AUTOCADのレイヤにアクセスするためのクラス「AcadLayerStateManager」には今回は変更がかかっていません。
AutoCAD2022 API ヒストリ リファレンスの英語は意訳すると
クラス「AcadApplication」は24から24.1にマイナーアップデートしたからこれからはAutoCAD2022でこのクラスを使うときにProgIDを指定するときは24.1としてAcad.Application.24.1としてね。24でも動かないことは無いけど24は引き続きAutoCAD2021が使うからAutoCAD2022が混在しているとエラー起こすからね。
といった感じです。
なので環境によっては「Acad.Application.24.1」なんてかかずにProgIDを省略して「Acad.Application」と書いたり「Acad.Application.24」書いたりしてもプログラム的には正常に動いたりするわけです。(※正しく書く方が当然良いです。)
次に作成されたテストプログラムですがレイヤへのアクセスは「AcadLayerStateManager」を利用するわけですが
"AutoCAD.AcadLayerStateManager.24.1"ではエラーが発生し
"AutoCAD.AcadLayerStateManager." & Left(CStr(AcadApplication.Version), 2)で正常に動作したのは
前述の通りProgIDが24.1になったのは「AcadApplication」の話であり、「AutoCAD.AcadLayerStateManager」は関係のない話で「AutoCAD.AcadLayerStateManager」のProgIDはAutoCAD2021で以前の23から24へとメジャーアップデートされておりProgIDとして24が必要だからです。
なので正常に動作させるにはテストプログラムのようにアプリケーションバージョンから必要な数値を変換してProgIDとして連結したり
"AutoCAD.AcadLayerStateManager.24"とProgIDを正しく書いてあげればいいわけです。
(※余談ですがAutoCAD2021 API ヒストリ リファレンスの方にも目を通していただければわかりますがAutoCAD2021で「AcadApplication」も23から24へとメジャーアップデートされています。)
以上、長文なうえに何だか講釈たれるような状態になって申し訳ないですが参考になれば幸いです。
kazk.o
お忙しいところ、回答頂きありがとう御座います。
"AcadLayerStateManager" では "AcadApplication" とは違うので "24.1" とする必要が無いと言う事、了解しました。
ありがとう御座いました。
お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。