怎么利用VBA从图形里读取块属性
本帖最后由 作者 于 2007-12-29 14:50:29 编辑 <br /><br /> <p>图形里有一个图框,带有图号,图名等几个属性。请问用VBA怎么才能读出来?</p><p>我自己写的代码有问题,请达人看看。谢谢</p><p>Private Sub CommandButton2_Click()</p><p>Dim Attr as Variant</p><p>For Each AcadBlockReference In ThisDrawing.Blocks</p><p>If AcadBlockReference.Name = "A2" Then</p><p>msgbox "There is Drawing border" '这一行可以正确运行,说明for each是历遍到所需要的那个AcadBlockReference对象的。</p><p>Attr = AcadBlockReference.GetAttributes ' 这一行提示不支持此方法...</p><p></p><p>End If</p><p>Next</p><p>End Sub</p><p></p><p>我觉得错误是因为Attr = <font color="#f70909">AcadBlockReference</font>.GetAttributes 的这一部分不是一个明确的对象</p><p>但是我试过好多办法都没法解决。</p> <p>你把块定义和块参照弄混了,ThisDrawing.Blocks是块定义集合,要找块参照到模型空间或图纸空间找</p> <p>Attr = ThisDrawing.Blocks.GetAttributes 应该行</p><p>一般都在相应的集合里找</p><p>比如: </p><p>文字样式在 TextStyles 里 </p><p>但是有时要注意 集合和里面元素的区别 如: <font color="#f70968">DimStyles(标注样式集合) 和 DimStyle</font></p><p></p> 学习 十几年前的帖子,我现在在学习,来回一下吧。
GetAttributes方法的对象是块参照BlockReFerence,而不是块定义blocks。
BlockReFerence的对象继承顺序是从Object到AcadObject AcadEntity再到 AcadBlockReference,它是实体,是用insertblock方法插入得到的,是实体。
blocks是块定义的集合。
1.先采用utility.getentity方法选取对应的属性图框,再通过getattributes方法获取属性值。
2.在thisdrawing.blocks中遍历的对应的块名,可获得非图形的块定义对象,该对象的内部用item方法再次
遍历,就会得到当初的attribute定义,该定义的tagstring,textstring可以用于寻找其定义时的默认值。
页:
[1]