明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 875|回复: 7

如何修用VBA修改块名

[复制链接]
发表于 2016-9-9 10:58 | 显示全部楼层 |阅读模式
我想在复制的时候就修改块名
代码如下
但是VBA不能修改块名吗?
如何解决呢?


Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
    Debug.Print CommandName
    If StrComp(CommandName, "COPYCLIP", vbTextCompare) = 0 Then
         Dim ss As AcadSelectionSet
         Dim ent As AcadEntity
         Set ss = ThisDrawing.PickfirstSelectionSet
         If ss.Count = 0 Then Exit Sub
         Set ent = ss.Item(0)
          If ss.Count = 1 And TypeOf ent Is AcadBlockReference Then
              ent.Name = "CCC"
              Stop
          End If
     End If
End Sub
发表于 2016-9-9 11:23 | 显示全部楼层
要这么获得块对象:
Set ent = ThisDrawing.Blocks(ss.Item(I).Name)
 楼主| 发表于 2016-9-9 11:41 | 显示全部楼层
mikewolf2k 发表于 2016-9-9 11:23
要这么获得块对象:
Set ent = ThisDrawing.Blocks(ss.Item(I).Name)

Set ent = ThisDrawing.Blocks(ss.Item(0).Name)
这样吗
这样没有通过
 楼主| 发表于 2016-9-9 11:43 | 显示全部楼层
本帖最后由 qcw911 于 2016-9-9 11:46 编辑

我的主要问题是如何VBA修改块名呢
用lisp  rename倒是可以
发表于 2016-9-9 12:18 | 显示全部楼层
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
     Debug.Print CommandName
     If StrComp(CommandName, "COPYCLIP", vbTextCompare) = 0 Then
          Dim ss As AcadSelectionSet
          Dim ent As AcadBlock
          Set ss = ThisDrawing.PickfirstSelectionSet
          If ss.Count = 0 Then Exit Sub
          Set ent = ThisDrawing.Blocks(ss.Item(I).Name)
          'Set ent = ss.Item(0)
          ' If ss.Count = 1 And TypeOf ent Is AcadBlockReference Then

               ent.Name = "CCC"
          '     Stop
           'End If
      End If
End Sub

评分

参与人数 1明经币 +1 金钱 +50 收起 理由
qcw911 + 1 + 50 很给力!

查看全部评分

 楼主| 发表于 2016-9-9 13:00 | 显示全部楼层
成功了
大神
Set ent = ThisDrawing.Blocks(ss.Item(I).Name)
i 怎么来的 默认为0??
 楼主| 发表于 2016-9-9 13:27 | 显示全部楼层
mikewolf2k 发表于 2016-9-9 12:18
Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
     Debug.Print CommandName
   ...

设置不了最佳答案,不好意思只能送金币了
发表于 2016-9-9 16:07 | 显示全部楼层
qcw911 发表于 2016-9-9 13:00
成功了
大神
Set ent = ThisDrawing.Blocks(ss.Item(I).Name)

不好意思,这段是从我原来代码拷过来的,忽略了这个I。在这段程序中I由于未定义默认是0,程序能够运行纯属巧合哈。这些错误你能够自行更正的。
问题的关键是要用thisdrawing.blocks方式来获得对象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-26 00:28 , Processed in 0.407569 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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