コミュニティ
AutoCAD - 日本語
製品テクニックや情報を共有、質問、解答したり、情報を検索など使い方は様々です。お役立てください。
キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

AutoCAD2022 VBA の AcadLayerStateManager の指定について質問

2件の返信2
解決済み
返信
メッセージ1/3
Satoshi_Igarashi
651 件の閲覧回数, 2 件の返信

AutoCAD2022 VBA の AcadLayerStateManager の指定について質問

お世話になっております。

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"としました。

タグ(1)
ラベル(4)
2件の返信2
メッセージ2/3
kazk.o
次のアカウントへの返信: Satoshi_Igarashi

ちょっとややこしいのでうまく説明できるか不安なんですが

まず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

EESignature

メッセージ3/3
Satoshi_Igarashi
次のアカウントへの返信: Satoshi_Igarashi

お忙しいところ、回答頂きありがとう御座います。

"AcadLayerStateManager" では "AcadApplication" とは違うので "24.1" とする必要が無いと言う事、了解しました。

ありがとう御座いました。

お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。

フォーラムに投稿  

State of Design & Make 2024

EE RESOURCES