乐筑天下

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

vba 添加选择集的问题

[复制链接]

17

主题

71

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2003-7-6 14:33:00 | 显示全部楼层 |阅读模式
我在用VBA做CAD二次开发时,定义一个选择集。程序如下:
Dim Selset As AcadSelectionSet '定义一个选择集"Selset"
UserForm2.Hide
    If Not IsNull(ThisDrawing.SelectionSets.Item("sset")) Then
    Set Selset = ThisDrawing.SelectionSets.Item("sset")
    Selset.Delete '如果选择集已存在,则删除
    End If
    Set Selset = ThisDrawing.SelectionSets.Add("sset") '添加选择集Selset
      Selset.SelectOnScreen '直接在屏幕上选择
运行时,提示“方法‘item’ ,作用于对象‘IACADSelectionSets’时失败”
1)去掉3-5行,正常。
2) 但第二次运行时出错。此时在加上3-5行,以后都正常。
  这是什么原因?请各位帮忙看看,指点
回复

使用道具 举报

3kd

7

主题

40

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
68
发表于 2003-7-6 18:29:00 | 显示全部楼层
这很正常呀。
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-7-6 19:14:00 | 显示全部楼层
选择集不能同名,也就是说你在第一次建立了名称为sset的选择集,第二次就不能再建立该名称的选择集了。
你可以先查看是否有该选择集存在,如果存在则清空,如果不在则新建。
回复

使用道具 举报

41

主题

657

帖子

9

银币

中流砥柱

Rank: 25

铜币
821
发表于 2003-7-6 20:04:00 | 显示全部楼层
For i = 0 To ThisDrawing.SelectionSets.Count - 1
ThisDrawing.SelectionSets.Item(i).Clear
ThisDrawing.SelectionSets.Item(i).Delete
Next
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-7-6 21:28:00 | 显示全部楼层
象这个问题在实用函数中已经有现有的函数供使用
回复

使用道具 举报

4

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
24
发表于 2003-7-7 10:59:00 | 显示全部楼层
For i = 0 To ThisDrawing.SelectionSets.Count - 1
ThisDrawing.SelectionSets.Item(i).Clear
ThisDrawing.SelectionSets.Item(i).Delete
Next
这样会不会把你不想删除的选择集也误删掉呢?
我想这样更好一点
Dim I As Integer
Dim BL0 As Boolean
Dim Str1 As String
Str1 = "sset"
BL0 = False
For I = ThisDrawing.SelectionSets.Count - 1 To 0 Step -1
     If ThisDrawing.SelectionSets(I).Name = Str1 Then
            BL0 = True
     End If
Next I
If  Not BL0 Then
     Set Selset = ThisDrawing.SelectionSets.Add("sset") '添加选择集Selset
End If
Selset.SelectOnScreen '直接在屏幕上选择
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2003-7-7 12:27:00 | 显示全部楼层
  1. Public Function CreateSelectionSet(Optional ssName As String = "ss") As AcadSelectionSet
  2.     Dim ss As AcadSelectionSet
  3.    
  4.     On Error Resume Next
  5.     Set ss = ThisDrawing.SelectionSets(ssName)
  6.     If Err Then Set ss = ThisDrawing.SelectionSets.Add(ssName)
  7.     ss.Clear
  8.     Set CreateSelectionSet = ss
  9. End Function
回复

使用道具 举报

17

主题

71

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2003-7-8 00:00:00 | 显示全部楼层
非常感谢各位的指点!
回复

使用道具 举报

24

主题

83

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
179
发表于 2003-7-13 22:40:00 | 显示全部楼层
我的做法是直接在新建选择集之前加上一句:
On Error Resume Next
好象就没有这个问题了
回复

使用道具 举报

17

主题

71

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
139
发表于 2003-7-19 09:44:00 | 显示全部楼层
这样还行,不过还是斑竹的够专业!!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:16 , Processed in 0.370363 second(s), 72 queries .

© 2020-2025 乐筑天下

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