乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 148|回复: 2

[编程交流] 清除所有未引用的块

[复制链接]

170

主题

347

帖子

174

银币

中流砥柱

Rank: 25

铜币
870
发表于 2022-7-6 22:54:33 | 显示全部楼层 |阅读模式
是否有VBA例程可以清除VBA中所有未使用或未删除的块?
我注意到如果我用这幅画。PurgeAll我的绘图中还有一些剩余的参考块。
如果手动清除它们,这些非反射块就会消失。
那么,有没有VBA例程可以用VBA清除所有未使用或未消除的块?
非常感谢。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 23:41:27 | 显示全部楼层
一个选项(许多选项中)。。。将逐步选择图形中的所有块,将其有效名称存储到LayerNameList变量中。然后,对于块集合中的每个块,如果EffectiveName不是LayerNameList的成员,则删除(从块集合中):眨眼:
 
希望这有帮助!
回复

使用道具 举报

18

主题

118

帖子

101

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
89
发表于 2022-7-7 00:07:56 | 显示全部楼层
我使用选择集
 
  1. Dim Block As AcadBlockReference
  2. For Each Paperino In ThisDrawing.SelectionSets
  3.     If Paperino.name = "BOM" Then
  4.        ThisDrawing.SelectionSets("BOM").Delete
  5.     Exit For
  6.     End If
  7. Next
  8. Dim PT1(0 To 2) As Double
  9. Dim PT2(0 To 2) As Double
  10. PT1(0) = 0#   'X
  11. PT1(1) = 0#   'Y
  12. PT1(2) = 0#   'Z
  13. PT2(0) = 170# 'X1
  14. PT2(1) = 260# 'Y1
  15. PT2(2) = 0# '  Z1
  16. GC(0) = 0
  17. GC(1) = 2
  18. GV(0) = "INSERT"
  19. '---------------------------------------------------
  20. 'Revise the block name "tendnum1" for your application
  21.    GV(1) = "$Conf*"
  22. intCode(0) = 0:
  23. intCode(1) = 2:
  24. '---------------------------------------------------
  25. ThisDrawing.SelectionSets.Add ("BOM")
  26. Set Ssnew = ThisDrawing.SelectionSets("BOM")
  27. Ssnew.Select acSelectionSetCrossing, PT2, PT1, intCode, GV
  28. For Each Entity In Ssnew
  29.        Set Block = Entity
  30.        BlockName = Block.name
  31.        If Left$(BlockName, 5) = "$Conf" Then
  32.        Block.Delete
  33. next
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 05:38 , Processed in 1.324447 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表