大灰狼1976 发表于 2018-8-21 22:25:00

求助:为何Block类型不能取得动态块属性数组

新手求助,使用下述代码,能判断对象是否为动态块,为什么不能取得属性数组?

Sub test()
Dim objBlkDef As AcadBlock
For Each objBlkDef In ThisDrawing.Blocks
If objBlkDef.IsDynamicBlock Then
    If objBlkDef.Name = "2458339.445652801" Then
      Dim dybProp As Variant
      dybProp = objBlkDef.GetDynamicBlockProperties
      For i = LBound(dybProp) To UBound(dybProp)
      If dybProp(i).PropertyName = "距离" Then
          dybProp(i).Value = 500#
          Exit For
      End If
      Next i
    End If
End If
Next
End Sub

大灰狼1976 发表于 2018-8-21 22:32:00

必须是AcadEntity才能取得此属性数组吗,但是用这个类型却得不到对象的正确名称,因为动态块调整过一次后会变成匿名块。各位大神请不吝赐教!

Kye 发表于 2018-8-22 06:28:00

帮老师顶个帖

Kye 发表于 2018-8-23 20:44:00

老师搜下帖名 动态块控制核心程序;;---------通用函数2:获得动态块所有属性(乐筑天下CAD论坛提供)--------- (defun xyl-getdynallpropvalue (par_blkref)   (setq Pros (vlax-invoke par_blkref 'GetDynamicBlockProperties))   (mapcar '(lambda (X)            (cons (vlax-get X 'PropertyName) (vlax-get X 'Value))            )         Pros   )

Kye 发表于 2018-8-23 21:14:00

这个贴 动态块问题,实在找不出来哪错了,请各位前辈抽空看下源码与你的问题更接近

大灰狼1976 发表于 2018-8-25 00:02:00

对AUTOLISP没研究过,正在学习VBA二次开发,用EffectiveName取到动态块的原始名后,我的问题已解决,谢谢帮顶。

nslove44202489 发表于 2018-8-25 18:16:00

用blockreference不要用block

chuyuan.wu 发表于 2018-10-17 22:32:00

谢谢分享。

dbgaytsy39185 发表于 2019-3-12 14:37:00

学习了

chixun99 发表于 2022-7-11 19:55:00


objBlkDef.Name这个块名是动态变化的,一般是个随机的字符串,所以vba取块名并不是原始块的那个块名。如判断原始块名还是需要用EffectiveName属性。
页: [1]
查看完整版本: 求助:为何Block类型不能取得动态块属性数组