hardwired 发表于 2008-3-20 10:28:51

属性不会更新。
找到每个块ref并用一个新的替换它更容易,首先匹配属性

Keith™ 发表于 2008-3-20 11:30:00

但是可以肯定的是,使用Keith提供的删除块中所有实体的函数,不会有任何不会更新的属性,因此只有新属性会出现并显示?

hardwired 发表于 2008-3-20 11:44:50

啊..现在我更充分地理解了你的要求的性质...
据我所知,如果更改属性的数量,更新属性的唯一方法是同步块引用。你也可以用VBA插入块,然后获取属性并修改它们。
在VBA中,您只能将属性附加到块、模型空间或图纸空间,没有addattributereference方法来添加对块中属性的引用。
假设您正在使用AddAttribute将属性添加回块中,那么您必须遍历每个AcadBlockReference,获取您想要保持不变的原点、比例、旋转、图层等,然后插入具有相同信息的新块,然后根据需要更新属性。

Keith™ 发表于 2008-3-20 12:15:39

哦,对了,所以还要加上:
' Checks if table exists and redefines (clearsout) the block of all data..
Function CleanoutBlock(currentBlock As AcadBlock)
    Dim blkItem As AcadEntity
    Dim blkAtt As AcadAttribute
    For Each blkItem In currentBlock
      blkItem.Delete
    Next blkItem
    For Each blkAtt In currentBlock
      blkAtt.Delete
    Next blkAtt
End Function
...对你的功能不起作用?
我试过了,但还是没用。我想做的就是从块中删除属性(和所有块实体),所以它是空的,然后把程序做的所有东西放回块中,所以如果用户在任何地方插入了任何块,这些块将反映用户在程序中的选择..
下面简单介绍一下该程序的功能:它从用户定义的数据中创建一个固定图表/表格(用户也可以从图纸中插入的块中选择一个固定,它会在文本框中输入所选固定的块名。有10行可以创建,每一行都通过复选框选中/取消选中。运行时,它为表格/图表的每一行添加两种类型的属性,一种是项目的参考号(一个常数)(即:FX1、FX2等),第二种是用户可以在用户表单的文本框中编辑的描述(一个标准)。当加载(userform _ Initialise)时,程序搜索表格的任何现有插入,并用该数据填充用户表单,因此用户可以编辑/添加/删除etc..当完成时,它插入块(如果新的/没有找到现有的表)或者只更新现有的..
现在有了我的代码(和Keith添加的代码),它可以工作99%,但是不会删除现有的普通属性(但是会删除常量属性(引用属性)..
我想,因为它删除了这些常量属性(该程序中的所有属性都是由块创建的。顺便说一下,AddAttribute)它也会删除正常的,但是它没有。这是因为属性的“常量”属性吗?

hardwired 发表于 2008-3-20 13:51:43

你不明白....
a)使用VBA编辑块时,只能编辑块表中的属性。它不影响块参照
b)如果在使用命令后使用attsync,块中不存在但附着到块参照的所有属性将从块参照中删除,块中但不在块参照中的所有属性将添加到块参照中。c) VBA没有用代码实现这一点的机制,所以你必须自己创建。d)我之前发布的代码实际上删除了块中的属性,但没有删除块引用。在VBA中没有这样做的方法
您可以执行以下操作之一:
1)运行程序后在命令行中执行at tsync
2)删除图形中Fixings_Chart的所有实例,并用新的块参照替换它们代码6]
现在要记住的重要事情是,如果您利用代码替换现有的块引用,您将需要手动填充所有属性,除非您在块中用默认值设置属性值。
页: 1 [2]
查看完整版本: 用VBA重新定义块..