概要 - VBA コードを VB に変換する(VBA/ActiveX)

サンプル コードを VB で使用できるように更新するには、まず、AutoCAD タイプ ライブラリを参照する必要があります。

VB でこれを行うには、[プロジェクト]メニューから[参照設定]を選択し、[参照設定]ダイアログ ボックスを表示します。[参照設定]ダイアログ ボックスから AutoCAD のタイプ ライブラリを選択し、[OK]をクリックします。

次に、サンプル コードで、ThisDrawing へのすべての参照を、アクティブなドキュメントを参照するユーザ指定の変数に置き換えます。それには、AutoCAD アプリケーション(acadApp)と現在の図面(acadDoc)の変数を定義します。次に、アプリケーション変数を現在の AutoCAD アプリケーションに設定します。

AutoCAD が実行中の場合は、AutoCAD のバージョン番号を指定すると、VB の GetObject 関数は AutoCAD Application オブジェクトを取得します。AutoCAD が実行中でない場合は、エラーが発生しますが、(この例では)エラーはトラップされクリアされます。次に、CreateObject 関数が AutoCAD Application オブジェクトを作成しようとします。オブジェクトが正常に作成された場合は AutoCAD が起動し、失敗した場合はエラーに関する説明がメッセージ ボックスに表示されます。

AutoCAD の複数のセッションを実行中の場合、GetObject 関数は Windows の Running Object Table の最初の AutoCAD インスタンスを返します。GetObject によって返されるセッションを確認する方法については、Microsoft VBA のマニュアルの Running Object Table(ROT)および GetObject 関数についての説明を参照してください。

AutoCAD の作図ウィンドウを表示するには、AutoCAD アプリケーションの Visible プロパティを TRUE に設定する必要があります。

GetObject によって AutoCAD の新しいインスタンスが作成される場合(つまり、GetObject を発行したとき、AutoCAD をまだ実行していない場合)、Visible を TRUE に設定しておかないと、AutoCAD アプリケーションが非表示になり、AutoCAD は Windows タスクバーにも表示されなくなります。

注: バージョンに依存しない ProgID を使用します。CreateObject または GetObject 関数がバージョンに依存しない ProgID を使用する場合は、その関数がバージョンに依存する ProgID を使用するように変更します。たとえば、CreateObject を使用する場合、CreateObject ("AutoCAD.Application")CreateObject ("AutoCAD.Application.20")に変更します。さらに、GetInterfaceObject メソッドがバージョンに依存しない ProgID を使用する場合、このメソッドをバージョンに依存する ProgID を使用するように変更しなければなりません。

Visual Basic 6 から AutoCAD に接続する

次のサンプル コードでは、ErrClear プロパティと Description プロパティが使用されています。これらのプロパティがサポートされていないコーディング環境の場合は、適宜、例を修正する必要があります。

Sub Ch2_ConnectToAcad()
    Dim acadApp As AcadApplication
    On Error Resume Next

    Set acadApp = GetObject(, "AutoCAD.Application.19")
    If Err Then
        Err.Clear
        Set acadApp = CreateObject("AutoCAD.Application.19")
        If Err Then
 MsgBox Err.Description
 Exit Sub
        End If
    End If
    MsgBox "Now running " + acadApp.Name + _
 " version " + acadApp.Version
End Sub

次に、ドキュメント変数を AutoCAD アプリケーションの Document オブジェクトに設定します。Application オブジェクトの ActiveDocument プロパティによって Document オブジェクトが返されます。

Dim acadDoc as AcadDocument
Set acadDoc = acadApp.ActiveDocument

この時点から、acadDoc を使って現在の AutoCAD 図面を参照します。

VBA と VB 比較コードの例

次のサンプル コードは、VBA と VB での線分の作成を示しています。

VBA を使用した線分の作成

Sub Ch2_AddLineVBA()
    ' This example adds a line
    ' in model space
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double

    ' Define the start and end
    ' points for the line
    startPoint(0) = 1
    startPoint(1) = 1
    startPoint(2) = 0
    endPoint(0) = 5
    endPoint(1) = 5
    endPoint(2) = 0

    ' Create the line in model space
    Set lineObj = ThisDrawing. _
        ModelSpace.AddLine _
        (startPoint, endPoint)

    ' Zoom in on the newly created line
    ZoomAll
End Sub

VB を使用した線分の作成

Sub Ch2_AddLineVB()
    On Error Resume Next

    ' Connect to the AutoCAD application
    Dim acadApp As AcadApplication
    Set acadApp = GetObject _
 (, "AutoCAD.Application.20")
    If Err Then
        Err.Clear
        Set acadApp = CreateObject _
 ("AutoCAD.Application.20")
        If Err Then
 MsgBox Err.Description
 Exit Sub
        End If
    End If

    ' Connect to the AutoCAD drawing
    Dim acadDoc As AcadDocument
    Set acadDoc = acadApp.ActiveDocument

    ' Establish the endpoints of the line
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double
    startPoint(0) = 1
    startPoint(1) = 1
    startPoint(2) = 0
    endPoint(0) = 5
    endPoint(1) = 5
    endPoint(2) = 0
    ' Create a Line object in model space
    Set lineObj = acadDoc.ModelSpace.AddLine _
 (startPoint, endPoint)
    ZoomAll
    acadApp.visible = True
End Sub