カスタマイズ‎ > ‎VBA‎ > ‎

AutoCAD VBA の移植

BricsCAD VBA は AutoCAD VBA との互換性が高く、プログラムについては、そのまま利用することができます。
サポートされていない部分もありますので、移植時には結果を必ず確認してください。


移植時のポイント

■ ファイル形式

AutoCAD VBAマクロファイルは拡張子[DVB]のファイルになります。BricsCAD VBAはこの拡張子[DVB]ファイルをそのままロードし、利用することができます。
AutoCAD VBAマクロファイルをロードするとコマンドラインに以下のようなメッセージが表示されます。

プロジェクト 'C:\***\***.dvb' は、他のバージョンか別のアプリケーションで作成されたものです。
このプロジェクトリファレンスを更新します。

このメッセージが表示されたとき、BricsCAD VBAの統合環境のオプションの「変数の宣言を強制する」にチェックを入れていると、ThisDrawing オブジェクトのマクロに Option Explicit 宣言を追加します。
Option Explicit が既に宣言されている場合、または、ThisDrawing オブジェクトのマクロにコードが記述されている場合、マクロ実行時にコンパイルエラーとなります。


BricsCAD VBAの統合環境のオプションの「変数の宣言を強制する」にチェックを入れている場合、ThisDrawingオブジェクトのマクロを確認してください。

■ オブジェクト、メソッド、関数

オブジェクト、メソッド、関数について、AutoCAD VBAマクロと同じ名前になっていますので、変更する必要はありません。
ただし、オブジェクトの型宣言が AutoCad.AcadPolyline のようにアプリケーション名をつけて宣言している場合は、変更が必要となります。 AcadPolyline のようにオブジェクト名のみの宣言としてください。

オブジェクト、メソッド、関数 などサポートされていないものを使っている場合はコンパイルエラーになります。そのときは、同等の結果が得られる別の方法を考える必要があります。

メソッド、関数の使い方によっては、実行時エラーが起こる場合があります。また、予期して、エラー処理を入れ、適切に処理している場合もあります。
AutoCAD VBAでは、実行時エラーとなるものが、BricsCAD VBA では、エラーにならない場合があります。エラー処理についても、予期する処理をしているか確認してください。

例えば、
システム変数[CLAYER]に、存在しない画層名を設定した場合、AutoCAD VBAでは実行時エラーを返します。
それを予期し、以下のようなコードを作成した場合、AutoCAD VBAでは、画層[Z0] を作成しますが、Bricscad VBAでは実行時エラーとならないため、画層[Z0]は作成されません。

On Error Resume Next
Call ThisDrawing.SetVariable("CLAYER", "Z0")
If Err.Number <> 0 Then
    Dim layerObj As AcadLayer
    Set layerObj = ThisDrawing.Layers.Add("Z0")
    Call ThisDrawing.SetVariable("CLAYER", "Z0")
End If
Err.Clear
On Error GoTo 0

■ システム変数

BricsCADでは、AutoCADの持つシステム変数の中でサポートしていないものがあります。
また、サポートはしているが、AutoCADでは読み書きできるが、BricsCADでは読み込み専用になっているものもあります。
SetVariableメソッドやGetVariableメソッドなどを使っている部分について、システム変数の有無などを確認してください。

例えば、
システム変数[DTextEd](AutoCAD2010以降)はサポートしていません。
システム変数[SDI]は、BricsCADでは読み込み専用のシステム変数となり、常に [0] を返します。

■ コマンド

BricsCADでは、AutoCADの持つコマンドの中でサポートしていないものがあります。
また、サポートはしているが、AutoCADとは引数やオプションが異なるものもあります。
SendCommandメソッドを使っている部分について、コマンドの有無などを確認してください。

例えば、
コマンド[SaveAs]では、テンプレートとして保存するためのオプション[T]や標準仕様として保存するためのオプション[S]はサポートしていません。