fircst 发表于 2007-12-29 14:41:00

怎么利用VBA从图形里读取块属性

图形里有一个图框,带有图号,图名等几个属性。请问用VBA怎么才能读出来?
我自己写的代码有问题,请达人看看。谢谢
Private Sub CommandButton2_Click()
Dim Attr as Variant
For Each AcadBlockReference In ThisDrawing.Blocks
If AcadBlockReference.Name = "A2" Then
msgbox "There is Drawing border" '这一行可以正确运行,说明for each是历遍到所需要的那个AcadBlockReference对象的。
Attr =AcadBlockReference.GetAttributes ' 这一行提示不支持此方法...
End If
Next
End Sub
我觉得错误是因为Attr =AcadBlockReference.GetAttributes 的这一部分不是一个明确的对象
但是我试过好多办法都没法解决。

雪山飞狐_lzh 发表于 2007-12-29 17:27:00

你把块定义和块参照弄混了,ThisDrawing.Blocks是块定义集合,要找块参照到模型空间或图纸空间找

kickmaster 发表于 2008-1-7 11:29:00

Attr =ThisDrawing.Blocks.GetAttributes应该行
一般都在相应的集合里找
比如:
文字样式在 TextStyles 里   
但是有时要注意   集合和里面元素的区别   如: DimStyles(标注样式集合) 和 DimStyle
       

wangjianyin 发表于 2019-4-27 22:20:00

学习

落叶交给了风 发表于 2019-5-10 10:32:00

十几年前的帖子,我现在在学习,来回一下吧。
GetAttributes方法的对象是块参照BlockReFerence,而不是块定义blocks。
BlockReFerence的对象继承顺序是从Object到AcadObject AcadEntity再到 AcadBlockReference,它是实体,是用insertblock方法插入得到的,是实体。
blocks是块定义的集合。

renhaitao_nice 发表于 2019-5-15 11:41:00

1.先采用utility.getentity方法选取对应的属性图框,再通过getattributes方法获取属性值。
2.在thisdrawing.blocks中遍历的对应的块名,可获得非图形的块定义对象,该对象的内部用item方法再次
遍历,就会得到当初的attribute定义,该定义的tagstring,textstring可以用于寻找其定义时的默认值。
页: [1]
查看完整版本: 怎么利用VBA从图形里读取块属性