将 VBA 代码转换为 VB

AutoCAD ActiveX/VBA

 
将 VBA 代码转换为 VB
 
 
 

要更新代码样例以在 VB 中使用,必须先引用 AutoCAD 类型库。要在 VB 中完成此操作,请从“工程”菜单中选择“引用”选项,启动“引用”对话框。在“引用”对话框中,选择 AutoCAD 类型库,然后单击“确定”。

然后在代码样例中,将所有对 ThisDrawing 的引用替换为引用活动文档、用户指定的变量。要完成这项操作,请为 AutoCAD 应用程序 (acadApp) 和当前的文档 (acadDoc) 定义变量。然后,将应用程序变量设置为当前的 AutoCAD 应用程序。

如果 AutoCAD 正在运行,指定 AutoCAD 版本号时,VB GetObject 函数将检索 AutoCAD Application 对象。如果 AutoCAD 没有运行,发生的错误(本例中)会被捕获然后清除。CreateObject 函数接着会试图创建一个 AutoCAD Application 对象。如果创建成功,会启动 AutoCAD;如果失败,则会显示一个消息框,说明发生的错误。

同时运行多个 AutoCAD 任务时,GetObject 函数会返回 Windows 运行对象表中的第一个 AutoCAD 实例。关于验证 GetObject 所返回任务的详细信息,请参见 Microsoft VBA 文档中的运行对象表 (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.17")。此外,如果 GetInterfaceObject 方法使用的是独立于版本的 ProgID,则必须将该方法更改成使用依赖于版本的 ProgID。

通过 Visual Basic 6 连接至 AutoCAD

本例使用 Err 的 Clear 和 Description 特性。如果用户编码环境不支持这些特性,则需要适当修改样例:

Sub Ch2_ConnectToAcad()
    Dim acadApp As AcadApplication
    On Error Resume Next
      
    Set acadApp = GetObject(, "AutoCAD.Application.17")
    If Err Then
        Err.Clear
        Set acadApp = CreateObject("AutoCAD.Application.17")
        If Err Then
            MsgBox Err.Description
            Exit Sub
        End If
    End If
    MsgBox "Now running " + acadApp.Name + _
           " version " + acadApp.Version
End Sub

接着,将文档变量设置为 AutoCAD 应用程序中的 Document 对象。Document 对象由 Application 对象的 ActiveDocument 特性返回。

Dim acadDoc as AcadDocument
Set acadDoc = acadApp.ActiveDocument

从现在开始,使用 acadDoc 变量引用当前的 AutoCAD 图形。

VBA 与 VB 比较代码样例

本例示范在 VBA 和 VB 中创建直线。

使用 VBA 创建直线:

Sub Ch2_AddLineVBA()
    ' 本例在模型空间中
    ' 添加一条直线
    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
      
    ' 在模型空间中创建直线
    Set lineObj = ThisDrawing._
        ModelSpace.AddLine _
        (startPoint, endPoint)
      
    ' 放大新创建的直线
    ZoomAll
End Sub

使用 VB 创建直线:

Sub Ch2_AddLineVB()
    On Error Resume Next
      
    ' 连接至 AutoCAD 应用程序
    Dim acadApp As AcadApplication
    Set acadApp = GetObject _
                  (, "AutoCAD.Application.17")
    If Err Then
        Err.Clear
        Set acadApp = CreateObject _
                  ("AutoCAD.Application.17")
        If Err Then
            MsgBox Err.Description
            Exit Sub
        End If
    End If
      
    ' 连接至 AutoCAD 图形
    Dim acadDoc As AcadDocument
    Set acadDoc = acadApp.ActiveDocument
      
    ' 创建直线的端点
    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
    ' 在模型空间中创建 Line 对象
    Set lineObj = acadDoc.ModelSpace.AddLine _
                         (startPoint, endPoint)
    ZoomAll
    acadApp.visible = True
End Sub