找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 707|回复: 9

[VBA程序]:怎么更改块里面的属性

[复制链接]
发表于 2005-10-27 10:50:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
现在这个过程可以更改块中的文字对象,可就是块中的属性里的文字更改不了,
为什么图形中单个的属性用下面的代码都可以更改,就是块里面的属性用下面的代码更改了之后没有反应?
请大虾指点一下吧!

Public Sub BlockEdit() '更改图形中的所有块对象
    Dim elem As Object
    For Each elem In Cad.Documents(0).Blocks  '遍历所有的块
        If elem.Name <> "*Model_Space" And elem.Name <> "*Paper_Space" Then
            Dim BlockSubObj As Object
            For Each BlockSubObj In elem '遍历块中的所有对象(会自动遍历嵌套的块中的对象)
                With BlockSubObj
                    If (.EntityName = "AcDbText") Or (.EntityName = "AcDbMText") Then .TextString = MyReplace(.TextString)
'                    If .EntityName = "AcDbAttributeDefinition" Then '更改块中的属性(现在还有问题:)
'                        .TagString = myReplace(.TagString)
'                        .TextString = myReplace(.TextString)
'                        .PromptString = myReplace(.PromptString)
'                        .Update
'                    End If
                End With
                DoEvents
                If Quit Then Exit Sub
            Next BlockSubObj
        End If
    Next elem
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-27 11:46:36 | 显示全部楼层
最初由 风雪大侠 发布
[B]现在这个过程可以更改块中的文字对象,可就是块中的属性里的文字更改不了,
为什么图形中单个的属性用下面的代码都可以更改,就是块里面的属性用下面的代码更改了之后没有反应?
请大虾指点一下吧!

Public Sub Bloc... [/B]


我将你的程序试着改动一下,却不好调试,你再调试一下,我们再交流

  1. Public Sub BlockEdit() '更改图形中的所有块对象
  2. Dim elem As Object
  3. Dim m As Integer, n As Integer
  4. For m = 0 To Cad.Documents(0).Count - 1    '遍历所有的实体
  5. Set elem = Cad.Documents(0).Item(m)
  6.   If elem.Name <> "*Model_Space" And elem.Name <> "*Paper_Space" Then
  7.    If (elem.ObjectName = "AcDbText") Or (elem.ObjectName = "AcDbMText") Then elem.TextString = myReplace(elem.TextString)
  8.     If elem.ObjectName = "AcDbBlockReference" Then
  9.      Dim AttFes As Variant
  10.      If elem.HasAttributes Then
  11.        AttFes = elem.GetAttributes               '返回块中的所有属性对象
  12.       For m = LBound(AttFes) To UBound(AttFes)  '遍历块中的所有对象(会自动遍历嵌套的块中的对象)
  13.        If elem.TextString = text1.Text Then      'text1.Text为待替换字符
  14.        elem.TextString = myReplace(.TextString)
  15.        End If
  16.       Next
  17.      End If
  18.     End If
  19. Next
  20. End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-28 09:17:17 | 显示全部楼层
属性和属性定义的联系不大,属性虽然以属性定义为模板生成,但生成后就和属性定义没有什么关系了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-28 15:01:58 | 显示全部楼层
1楼楼主,代码调试得怎么样,我和你有同样的想法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-31 08:37:54 | 显示全部楼层
不好意思,我几天没上网了,现在我试一下啊。
感谢大家热心的帮助!

现在调试好了,可以更改块里面的属性了,但是又有问题了:如果块里面有嵌套的块,那怎么更改嵌套的块里面的属性啊!

Public Sub AttribEdit(x As AcadBlockReference)  '更改块中的所有属性对象
    Dim AttFes, m
    '首先更改块中第一层的所有属性
    If x.HasAttributes Then
        AttFes = x.GetAttributes '返回块中的所有属性对象
        For Each m In AttFes '遍历块中的所有属性对象
            m.TextString = MyReplace(m.TextString)
        Next
    End If
    '再检查是否有嵌套块,如有则进行递归循环
'    For Each m In x
'        If m.EntityName = "AcDbBlockReference" Then
'            Call AttribEdit(m)
'        End If
'    Next
End Sub
块参照AcDbBlockReference不允许遍历,那我怎么去改里面嵌套的块呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-4 11:58:58 | 显示全部楼层
最初由 风雪大侠 发布
[B]如果块里面有嵌套的块,那怎么更改嵌套的块里面的属性啊!块参照AcDbBlockReference不允许遍历,那我怎么去改里面嵌套的块呢
[/B]

     我的思路是:先定义中间变量引用块,炸开块引用对象(用explode方法炸开),定义中间变量引用炸开块,再同原方法进行修改
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-4 12:33:29 | 显示全部楼层
我觉得还是尽量不分解的好,不然的话我一打开图纸就把所有的块全部分解,然后再进行文字替换岂不是更方便!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-4 12:59:00 | 显示全部楼层
最初由 风雪大侠 发布
[B]我觉得还是尽量不分解的好,不然的话我一打开图纸就把所有的块全部分解,然后再进行文字替换岂不是更方便! [/B]

      这个我是知道的,对有嵌套的块只能进行先分解再进行文字替换后重新建引用块插入图中并将原来的一并删除,VBA只能如此了,不知其他大侠有何良策?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-4 19:17:04 | 显示全部楼层
嵌套块的属性,挺绕口的:),有什么用?或者说你会用到它么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-5 09:10:24 | 显示全部楼层
因为我的程序是要替换CAD文件中的所有文字,如果嵌套块里的属性改不了的话,那会很失败的!(虽然一般属性只出现在第一层块里面)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-28 23:25 , Processed in 0.401995 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表