フォローする

VBA - IJCAD 6.4 から IJCAD 2015 への Visual Basic for Application の移行について

更新 : 2017-02-02 03:01:14 UTC

対象製品: IJCAD 2014 以降

IJCAD 6.4 で作成された Visual Basic for Application を IJCAD 2014 以降の製品に移行させるには、

幾つかの手順を踏む必要があるので、IJCAD 2015 を使用して説明していきます。

 

IJCAD 6.4 での Visual Basic for Application の動作確認 

  • IJCAD 6.4 では、図面ファイル(拡張子.dwg)を開くと、同じフォルダ内の同じ名前のVBAプロジェクトファイル(拡張子 .vbi)を開くようになっています。また、図面を保存するとVBIファイルも保存されます。
    SECURITY [セキュリティ]コマンドで、セキュリティ レベルを中または低レベルに設定することで、未署名のVBAプロジェクトを開くことができます。

    IJCAD 2015 では、VBAMAN[VBA管理]コマンド、VBALOAD[VBAロード]コマンドから、VBAプロジェクトファイルを開くことができます。
    マクロを有効にするをクリックすると、VBAエディタにプロジェクトファイルがロードされ、編集と実行が可能になります。

  • VBARUN[マクロ実行]コマンドを実行すると、次のダイアログボックスが表示されます。

    マクロを選んで実行ボタンを押すことでマクロを実行することができます。
    ※DWGファイルと、VBIファイルのオリジナルを保存しておいてください。

  • IJCAD 2015 を起動させ、VBALOADコマンドを実行すると、次のダイアログボックスが表示されます。

    IJCAD 6.4 とIJCAD 2015 のプロジェクトファイルはどちらもVBIファイルですが、プロジェクトファイルを選び、開くボタンを押してもIJCAD 6.4 のVBAプロジェクトは開くことができません。

    IJCAD 6.4 で作成されたプロジェクトをIJCAD 2015 へ移行するためには、プロジェクト内のファイルのエクスポートとインポートが必要となります。

 

IJCAD 6.4 でソースファイルをエクスポートする 

  1. IJCAD 6.4でVBAIDE[VBA編集]コマンドを実行し、VBAウィンドウを表示します。
    プロジェクトウインドウに、現在利用可能なVBAプロジェクトとソースファイルの一覧が表示されます。
    その中からエクスポートするファイルを選択し、右クリックを押してファイルのエクスポートを選択します。


  2. 保存先のフォルダを指定して保存します。


    エクスポートしたファイルの一覧です。
    クラスファイル(拡張子 .cls)
    • ThisDocument.cls :ユーザークラスファイルで、テキストファイルになっています。
    フォームファイル(拡張子 .frm)
    • UserForm1.frm :ユーザーフォームのコード部分で、テキストファイルになっています。
    フォームファイル(拡張子 .frx)
    • UserForm1.frx :ユーザーフォームのリソース部分で、バイナリファイルになっています。
    モジュールファイル(拡張子 .bas)
    • 一般モジュールファイルで、テキストファイルになっています。
  • ※ソースコードだけが必要なら、VBAエディタでクリップボードにコピーするほうが簡単かもしれません。
    エディタ内で範囲を指定して、右クリックのメニューからコピーを選択するか[Ctrl + C]でコピーします。

 

IJCAD 2015 でソースファイルをインポートする 

  1. IJCAD 2015を起動して、VBAIDE[VBA編集]コマンドを実行します。
    中身のないVBAが生成され、プロジェクトウインドウに表示されます。


  2. IJCADに画面を戻して、VBAMAN[VBA管理]コマンドを実行します。
    プロジェクトを選択すると、名前を付けて保存(S)ボタンが有効になるので、ボタンを押します。


  3. 保存先のフォルダを指定して、プロジェクトファイルに名前を付けて保存します。


  4. VBA管理ダイアログの Visual Basic Editor ボタンを押すと、Visual Basic ウィンドウに戻ることができるので、プロジェクトウインドウでプロジェクトを右クリックすると、ファイルのインポートを選択できます


  5. UserForm1.frmファイルを選択して開き、プロジェクトにインポートします。
    一般モジュールやクラスモジュールも、ファイルのインポートで取り込むことができますが、うまくいかない場合はソースコードだけをコピーし、新規で挿入した一般モジュールやクラスモジュールにペーストしてください。


  6. ThisDocument.clsファイルをインポートすると、次の図のようにクラスモジュールとしてプロジェクトに追加されました。この内容は、ThisDrawingにあるべき内容なので、ThisDrawing.cls ファイルへコピー&ペーストし、ThisDocument.cls はプロジェクトから削除します。

    ThisDocument.cls のコードをThisDrawing にコピー&ペーストし、ThisDocument.cls をプロジェクトから削除しました。


  7. インポートが完了したら、プロジェクトを保存します。
    ファイルメニューにプロジェクトの上書き保存がありますが、ツールバー上のアイコンがフロッピーディスクのボタンや、[Ctrl + S]を押しても、プロジェクトの上書き保存を呼び出すことができます。

 

IJCAD 2015 で動作確認する 

  • マクロとして呼び出し可能な手続きに対して、Visual Basic の実行ボタンを押せばマクロが動作しますが、IntellCADのオブジェクトを扱う DimensionStyl を参照している行で、コンパイル エラーになります。
    正常に起動させるためには、IJCAD 2015のVBAエディタ上でコードの修正を行う必要があります。

 

IJCAD 6.4 と IJCA D2015 の変更箇所

IJCAD 6.4とIJCAD 2015で以下の通りの変更点があります。 

  • 平行寸法を作成するマクロ
    1. IJCAD 6.4 でドキュメントを取得するThisDocumentが、IJCAD 2015ではThisDrawingに変わっています。
    2. 寸法スタイルを扱うクラスであるDimensionStyleが、IJCAD 2015 ではGcadDimStyleに変わり、クラス名に Gcad という接頭辞がついていることが違います。
    3. 寸法スタイルの上書きはアクセス方法に変更があるので、下記のサンプルではコメントアウトされています。
    4. IJCAD 6.4 では座標値を扱う Point というクラスがありましたが、IJCAD 2015では3要素の実数配列を使用します。これはAutoCADオートメーションと同様の仕様です。
      IJCAD 6.4のコードですが、このような記述では、p1,p2の型はバリアント型でp3がPointクラスとして宣言されています。IJCAD 2015で、Dim p1(0 to 2), p2(0 to 2), p3(0 to 2) As Double と定義してしまうと、p1とp2はバリアント型の配列でp3は実数型の配列になります。
      IJCAD 2015で作図系のメソッドに対してバリアント型の配列を渡すと、エラーになるので注意が必要です。

    IJCAD 6.4
    
    Public Sub TestAddDim()
        Dim curDimStyle As DimensionStyle
        Set curDimStyle = ThisDocument.ActiveDimStyle
        With curDimStyle
            .DimBlk = "SMALL"
            .DimSah = 0
            .DimClrd = 3
        End With
        
        Dim p1, p2, p3 As Point
        Set p1 = Library.CreatePoint(0#, 0#, 0#)
        Set p2 = Library.CreatePoint(10#, 0#, 0#)
        Set p3 = Library.CreatePoint(5#, 2#, 0#)
    
        ModelSpace.AddDimAligned( p1, p2, p3)
    End Sub
    
    IJCAD 2015
    
    Public Sub TestAddDim()
        Dim curDimStyle As GcadDimStyle
        Set curDimStyle = ThisDrawing.ActiveDimStyle
    '    With curDimStyle
    '        .DimBlk = "SMALL"
    '        .DimSah = 0
    '        .DimClrd = 3
    '    End With
    
        Dim p1(0 To 2) As Double
        Dim p2(0 To 2) As Double
        Dim p3(0 To 2) As Double
        p1(0) = 0#
        p1(1) = 0#
        p1(2) = 0#
        p2(0) = 10#
        p2(1) = 0#
        p2(2) = 0#
        p3(0) = 5#
        p3(1) = 2#
        p3(2) = 0#
        
        ModelSpace.AddDimAligned(p1, p2, p3)
    End Sub
    
  • 画層リストを表示するマクロ
    1. フォームのリソース部分はそのまま使用できます。
    2. 平行寸法を作成するマクロ同様に、クラス変数名 ThisDocument が ThisDrawing に変わった点と、クラス名に Gcad という接頭辞がついていることが違います。

    IJCAD 6.4
    
    Private Sub CommandButton1_Click()		
        Dim rec As Layer		
        Set rec = ThisDocument.Layers.Item(ListBox1.Text)	
        If Not rec Is Nothing Then		
            ThisDocument.ActiveLayer = rec		
        End If		
    End Sub		
    		
    Private Sub UserForm_Activate()		
        ListBox1.Clear		
        Dim rec As Layer		
        For Each rec In ThisDocument.Layers		
            ListBox1.AddItem rec.Name		
        Next		
    End Sub		
    				
    Public Sub TestForm()		
        UserForm1.Show		
    End Sub	
    
    IJCAD 2015
    
    Private Sub CommandButton1_Click()
        Dim rec As GcadLayer
        Set rec = ThisDrawing.Layers.Item(ListBox1.Text)
        If Not rec Is Nothing Then
            ThisDrawing.ActiveLayer = rec
        End If
    End Sub
    
    Private Sub UserForm_Activate()
        ListBox1.Clear
        Dim rec As GcadLayer
        For Each rec In ThisDrawing.Layers
            ListBox1.AddItem rec.Name
        Next
    End Sub
    
    Public Sub TestForm()
        UserForm1.Show
    End Sub
    

このように、IJCAD 6.4 からエクスポートしたファイルを、IJCAD 2015にインポートを行っただけではマクロを実行することはできません。プロジェクトの規模が大きいほど、より多くのコードの修正をする必要があります。
これは、IJCAD 2015 のオートメーションが、よりAutoCADのオートメーションに近い仕様になっている為に、以前のバージョンのIJCADのオートメーションとの仕様に差がある為です。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント