找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 682|回复: 5

[VBA函数]:建立一个选择集,空对象指针错误

[复制链接]
发表于 2005-6-2 18:15:23 | 显示全部楼层 |阅读模式

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

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

×
这段程序是建立一个选择集,将标注对象加入选择集,把所有的标注都删除

当然,有更好的办法更好,请看一下下面的代码   



Set ACADapp = GetObject(, "AutoCAD.Application")
    Set ACADdoc = ACADapp.ActiveDocument
    Dim ssetObj As AcadSelectionSet
    ACADapp.ActiveDocument.SelectionSets("TEST_SELECTIONSET").Delete
    Set ssetObj = ACADapp.ActiveDocument.SelectionSets.Add("TEST_SELECTIONSET")
   
    Dim i As Long
    Dim obj As AcadObject

    i = 0
    For Each obj In ACADapp.ActiveDocument.ModelSpace    '遍历工作区中的实体
        Select Case obj.EntityName
            Case "AcDbMText", "AcDbText", "AcDbRadialDimension", "AcDb3PointAngularDimension", "AcDbRotatedDimension", "AcDbAlignedDimension", "AcDbOrdinateDimension", "AcDbFcf", "AcDbLeader"
                i = i + 1
            Case Else
        End Select
    Next obj

    MsgBox i
    ReDim ssobjs(0 To i) As AcadEntity

    i = 0
    For Each obj In ACADapp.ActiveDocument.ModelSpace    '遍历工作区中的实体
        Select Case obj.EntityName
            Case "AcDbMText", "AcDbText", "AcDbRadialDimension", "AcDb3PointAngularDimension", "AcDbRotatedDimension", "AcDbAlignedDimension", "AcDbOrdinateDimension", "AcDbFcf", "AcDbLeader"
                Set ssobjs(i) = ACADapp.ActiveDocument.ModelSpace.Item(i)
                i = i + 1
            Case Else
        End Select

    Next obj
    MsgBox i
   
    ssetObj.AddItems ssobjs                    '这句老提示空对象指针,是怎么回事
   
    ssetObj.Erase
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-2 20:53:24 | 显示全部楼层
Sub tt()
On Error Resume Next
Dim ss As AcadSelectionSet
ThisDrawing.SelectionSets("TEST").Delete
Set ss = ThisDrawing.SelectionSets.Add("TEST")
Dim ft(0) As Integer, fd(0)
ft(0) = 0: fd(0) = "dim*"
ss.Select acSelectionSetAll, , , ft, fd
ss.Erase
ss.Delete
End Sub
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-3 09:23:24 | 显示全部楼层
Dim ft(0) As Integer
    Dim fd(0) As Variant
   
    ft(0) = 0
'    ft(1) = 0
'    ft(2) = 0
'    ft(3) = 0
'    ft(4) = 0
'    ft(5) = 0
'    ft(6) = 0
'    ft(7) = 0
'    ft(8) = 0
'    ft(9) = 0
    fd(0) = "circle" ' fd(0) = "MText"
'    fd(1) = "Text"
'    fd(2) = "RadialDimension"
'    fd(3) = "3PointAngularDimension"
'    fd(4) = "RotatedDimension"
'    fd(5) = "AlignedDimension"
'    fd(6) = "OrdinateDimension"
'    fd(7) = "Fcf"
'    fd(8) = "Leader"
    ssetObj.Select acSelectionSetAll, , , ft, fd
'    ssetObj.Select acSelectionSetAll, , , ft, fd(1)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(2)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(3)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(4)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(5)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(6)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(7)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(8)
'    ssetObj.Select acSelectionSetAll, , , ft, fd(9)
'
圆可以,标注线这类的怎么就不行呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2005-6-4 09:54:19 | 显示全部楼层
看了,执行删除圆没问题,代码如下:
  Dim ft(0) As Integer
    Dim fd(0) As Variant  
    ft(0) = 0
    fd(0) = "circle"
    ssetObj.Select acSelectionSetAll, , , ft, fd
    ssetObj.Erase
    ssetObj.Delete
    ZoomAll

但是如果删除标注的话,执行完了,没有任何错误,但跟没执行一样,标注删不掉
代码如下:
  Dim ft(0) As Integer
    Dim fd(0) As Variant  
    ft(0) = 0
    fd(0) = "RadialDimension"       标注类型:半径标注
    ssetObj.Select acSelectionSetAll, , , ft, fd
    ssetObj.Erase
    ssetObj.Delete
    ZoomAll

我想把所有标注一次都放到数组中,才出现了3楼加注释的代码
难道是标注类型的表达方式写的有问题?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-6-4 12:18:42 | 显示全部楼层
fd(0) = "dim*"就是代表所有标注
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 01:24 , Processed in 0.368370 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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