首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何引用AutoCAD块

如何引用AutoCAD块
EN

Stack Overflow用户
提问于 2018-06-14 05:20:49
回答 1查看 550关注 0票数 2

我有一个autocad项目,其中是一个动态块,我正试图从excel更改。下面是我用来更改块的vba脚本:

代码语言:javascript
复制
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项目的连接,如下所示:

代码语言:javascript
复制
  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代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2019-03-22 05:54:09

你有没有试过添加参考库?

您可以访问:

工具->参考

并添加:

AutoCAD 20xx类型库

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50846447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档