调整AutoCAD VBA以在Excel中工作

调整AutoCAD VBA以在Excel中工作,excel,autocad,vba,Excel,Autocad,Vba,我已经编写了一个在AutoCAD VBA中工作的代码(在帮助下),但我希望对其进行调整,以便可以从Excel中运行它,并将其集成到较长的宏中。我尝试用ACAD.ActiveDocument替换ThisDrawing,但这不起作用。以下是我的完整AutoCAD VBA代码: Public Sub Section() Dim SolidObject As Acad3DSolid Dim NewRegionObject As AcadRegion Dim PlaneOrigin

我已经编写了一个在AutoCAD VBA中工作的代码(在帮助下),但我希望对其进行调整,以便可以从Excel中运行它,并将其集成到较长的宏中。我尝试用
ACAD.ActiveDocument
替换
ThisDrawing
,但这不起作用。以下是我的完整AutoCAD VBA代码:

Public Sub Section()
    Dim SolidObject As Acad3DSolid
    Dim NewRegionObject As AcadRegion
    Dim PlaneOrigin As Variant
    Dim PlaneXaxisPoint As Variant
    Dim PlaneYaxisPoint As Variant
    Dim PickedPoint As Variant
    On Error Resume Next
    With ThisDrawing.Utility
        .GetEntity SolidObject, PickedPoint, vbCr & "Select solid to cut."
        If Err Then
            MsgBox "Selected solid must be a 3DSolid"
            Exit Sub
        End If
        PlaneOrigin = .GetPoint(PickedPoint, vbCr & "Select point to define origin.")
        PlaneXaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define x-axis.")
        PlaneYaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define y-axis.")
        Dim minPoint As Variant, maxPoint As Variant
        Set NewRegionObject = SolidObject.SectionSolid(PlaneOrigin, PlaneXaxisPoint, PlaneYaxisPoint)
        With NewRegionObject
            MsgBox "Area: " & .Area
            MsgBox "Perimeter: " & .Perimeter

            .GetBoundingBox minPoint, maxPoint
            MsgBox "Min Point coordinates: (" & minPoint(0) & "," & minPoint(1) & "," & minPoint(2) & ")"
            MsgBox "Max Point coordinates: (" & maxPoint(0) & "," & maxPoint(1) & "," & maxPoint(2) & ")"
        End With
    End With
End Sub

您可以使用此功能查看是否有正在运行的AutoCad实例,如果有,则获取该实例:

Function Set_Acad(Acad As AcadApplication) As Boolean
    On Error Resume Next
    Set Acad = GetObject(, "AutoCAD.Application") 'Get a running instance of the class AutoCAD.Application
    On Error GoTo 0
    Set_Acad = Not Acad Is Nothing
End Function
要在主代码中进行利用,请执行以下操作:

Option Explicit

Public Sub Section()
    Dim SolidObject As Acad3DSolid
    Dim NewRegionObject As AcadRegion
    Dim PlaneOrigin As Variant
    Dim PlaneXaxisPoint As Variant
    Dim PlaneYaxisPoint As Variant
    Dim PickedPoint As Variant

    Dim Acad As AcadApplication '<--| declare a variable of type 'AcadApplication'

    If Not Set_Acad(Acad) Then Exit Sub '<--| exit if there's no Autocad running instance, otehrwise set 'Acad' variable to it

    With Acad.ActiveDocument.Utility '<--| now you can use Acad to reference 'Autocad' application and all its objects/methods/properties

        On Error Resume Next
       .GetEntity SolidObject, PickedPoint, vbCr & "Select solid to cut."
        If Err Then
            MsgBox "Selected solid must be a 3DSolid"
            Set Acad = Nothing
            Exit Sub
        End If
        On Error GoTo 0

        PlaneOrigin = .GetPoint(PickedPoint, vbCr & "Select point to define origin.")
        PlaneXaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define x-axis.")
        PlaneYaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define y-axis.")
        Dim minPoint As Variant, maxPoint As Variant
        Set NewRegionObject = SolidObject.SectionSolid(PlaneOrigin, PlaneXaxisPoint, PlaneYaxisPoint)
        With NewRegionObject
            MsgBox "Area: " & .area
            MsgBox "Perimeter: " & .Perimeter

            .GetBoundingBox minPoint, maxPoint
            MsgBox "Min Point coordinates: (" & minPoint(0) & "," & minPoint(1) & "," & minPoint(2) & ")"
            MsgBox "Max Point coordinates: (" & maxPoint(0) & "," & maxPoint(1) & "," & maxPoint(2) & ")"
        End With
    End With

    Set Acad = Nothing    
End Sub
选项显式
公共分组()
将SolidObject暗显为Acad3D实体
将新区域对象变暗为一个区域
作为变体的起源
变暗平面X轴点作为变量
变暗平面轴点作为变量
变暗拾取点作为变量

将Acad设置为AcadApplication'可以使用此功能查看是否有正在运行的AutoCad实例,如果有,则获取它:

Function Set_Acad(Acad As AcadApplication) As Boolean
    On Error Resume Next
    Set Acad = GetObject(, "AutoCAD.Application") 'Get a running instance of the class AutoCAD.Application
    On Error GoTo 0
    Set_Acad = Not Acad Is Nothing
End Function
要在主代码中进行利用,请执行以下操作:

Option Explicit

Public Sub Section()
    Dim SolidObject As Acad3DSolid
    Dim NewRegionObject As AcadRegion
    Dim PlaneOrigin As Variant
    Dim PlaneXaxisPoint As Variant
    Dim PlaneYaxisPoint As Variant
    Dim PickedPoint As Variant

    Dim Acad As AcadApplication '<--| declare a variable of type 'AcadApplication'

    If Not Set_Acad(Acad) Then Exit Sub '<--| exit if there's no Autocad running instance, otehrwise set 'Acad' variable to it

    With Acad.ActiveDocument.Utility '<--| now you can use Acad to reference 'Autocad' application and all its objects/methods/properties

        On Error Resume Next
       .GetEntity SolidObject, PickedPoint, vbCr & "Select solid to cut."
        If Err Then
            MsgBox "Selected solid must be a 3DSolid"
            Set Acad = Nothing
            Exit Sub
        End If
        On Error GoTo 0

        PlaneOrigin = .GetPoint(PickedPoint, vbCr & "Select point to define origin.")
        PlaneXaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define x-axis.")
        PlaneYaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define y-axis.")
        Dim minPoint As Variant, maxPoint As Variant
        Set NewRegionObject = SolidObject.SectionSolid(PlaneOrigin, PlaneXaxisPoint, PlaneYaxisPoint)
        With NewRegionObject
            MsgBox "Area: " & .area
            MsgBox "Perimeter: " & .Perimeter

            .GetBoundingBox minPoint, maxPoint
            MsgBox "Min Point coordinates: (" & minPoint(0) & "," & minPoint(1) & "," & minPoint(2) & ")"
            MsgBox "Max Point coordinates: (" & maxPoint(0) & "," & maxPoint(1) & "," & maxPoint(2) & ")"
        End With
    End With

    Set Acad = Nothing    
End Sub
选项显式
公共分组()
将SolidObject暗显为Acad3D实体
将新区域对象变暗为一个区域
作为变体的起源
变暗平面X轴点作为变量
变暗平面轴点作为变量
变暗拾取点作为变量
将Acad设置为AcadApplication'从Excel在AutoCAD中创建一条线(必须打开)
但您必须进入工具->参考并添加[AutoCAD 20xx类型库]

    Sub testline()
    Dim app
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double

    On Error Resume Next
        Set app = GetObject(, "AutoCAD.Application")
    On Error GoTo 0

    If (app Is Nothing) Then Exit Sub

    startPoint(0) = 100
    startPoint(1) = 100
    startPoint(2) = 0
    endPoint(0) = 200
    endPoint(1) = 200
    endPoint(2) = 0

    Set lineObj = app.Documents(0).ModelSpace.AddLine(startPoint, endPoint)

End Sub
从Excel在AutoCAD中创建一行(必须打开)
但您必须进入工具->参考并添加[AutoCAD 20xx类型库]

    Sub testline()
    Dim app
    Dim lineObj As AcadLine
    Dim startPoint(0 To 2) As Double
    Dim endPoint(0 To 2) As Double

    On Error Resume Next
        Set app = GetObject(, "AutoCAD.Application")
    On Error GoTo 0

    If (app Is Nothing) Then Exit Sub

    startPoint(0) = 100
    startPoint(1) = 100
    startPoint(2) = 0
    endPoint(0) = 200
    endPoint(1) = 200
    endPoint(2) = 0

    Set lineObj = app.Documents(0).ModelSpace.AddLine(startPoint, endPoint)

End Sub

如果调用的对象在excel中可用,则应检查MSDN文档。例如SolidObject和NewRegionObject首先,是否将AutoCad库加载到VBA项目中?是的,我在中加载了它。如果调用的对象在excel中可用,您应该检查MSDN文档。例如,SolidObject和NewRegionObject首先,是否将AutoCad库加载到VBA项目中?是的,我将其加载到