vba - 如何引用 AutoCAD block

标签 vba excel autocad autocad-plugin

我有 autocad 项目,其中 1 个动态 block 是我试图从 excel 更改的。
这是我用来更改 block 的 vba 脚本:

Dim dybprop As Variant, i As Integer
Dim bobj As AcadEntity

For Each bobj In ACADApp.ModelSpace
    If bobj.ObjectName = "AcDbBlockReference" Then
        If bobj.IsDynamicBlock Then
            If bobj.EffectiveName = "AdjBlock" Then
                dybprop = bobj.GetDynamicBlockProperties
                For i = LBound(dybprop) To UBound(dybprop)
                    If dybprop(i).PropertyName = "Distance1" Then
                        dybprop(i).Value = 50.75
                        Acad.Application.Update
                    End If
                Next i
            End If
        End If
    End If
Next

End With

当我在 AutoCAD VBA 中运行它时,它运行良好。比我创建 Excel VBA 项目并复制此代码。在运行它之前,我创建了与现有 AutoCad 项目的连接,如下所示:
  On Error Resume Next

   Dim ACADApp As AcadApplication
   Dim a As Object

   Set a = GetObject(, "AutoCAD.Application")

   If a Is Nothing Then
      Set a = CreateObject("AutoCAD.Application")

      If a Is Nothing Then
         MsgBox "AutoCAD must be running before performing this action.", vbCritical
         Exit Sub
      End If
   End If

   Set ACADApp = a

   Set ACADApp.ActiveDocument = ACADApp.Documents.Open("c:\KIRILL\Programming\Drawing1_VBATest.dwg")

当我从 Excel VBA 运行它时 - 出现 AutoCAD 项目但没有任何变化。老实说,我不知道为什么在 Excel VBA 中它不起作用,而在 AutoCAD 中它起作用。可能有人以前遇到过这个问题吗?提前致谢。

附言完整的 Excel VBA 代码:
Sub Button9_Click()

  On Error Resume Next

   Dim ACADApp As AcadApplication
   Dim a As Object

   Set a = GetObject(, "AutoCAD.Application")

   If a Is Nothing Then
      Set a = CreateObject("AutoCAD.Application")

      If a Is Nothing Then
         MsgBox "AutoCAD must be running before performing this action.", vbCritical
         Exit Sub
      End If
   End If

   Set ACADApp = a

   Set ACADApp.ActiveDocument = ACADApp.Documents.Open("c:\KIRILL\Programming\Drawing1_VBATest.dwg")

Dim dybprop As Variant, i As Integer
Dim bobj As AcadEntity

For Each bobj In ACADApp.ModelSpace
    If bobj.ObjectName = "AcDbBlockReference" Then
        If bobj.IsDynamicBlock Then
            If bobj.EffectiveName = "AdjBlock" Then
                dybprop = bobj.GetDynamicBlockProperties
                For i = LBound(dybprop) To UBound(dybprop)
                    If dybprop(i).PropertyName = "Distance1" Then
                        dybprop(i).Value = 50.75
                        Acad.Application.Update
                    End If
                Next i
            End If
        End If
    End If
Next



End Sub

最佳答案

您是否尝试过添加引用库?

你可以去:

Tools->References



并添加:

[AutoCAD 20xx Type Library]

关于vba - 如何引用 AutoCAD block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50846447/

相关文章:

python - 根据列值拆分数据框并导出到不同的 Excel 工作表

c++ - C++ 中的开源 DXF 解析器

functional-programming - AutoLISP:如何解决无函数定义错误?

excel - 从 Excel 2019 中的 url 下载文件(适用于 Excel 2007)

mysql - 我应该多久索引一次?

regex - 如何在正则表达式模式中包含变量

excel - 为什么当我们这样写时范围对象不会自动生成 worksheets(1).range ("A1")

c++ - 学习 CAD/CAE 文件格式的起点?

excel - VBA评估Excel函数

excel - VBA Excel : modify dynamic named range code