乐筑天下

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

[求助]遍历选择集时循环为什么从0到SSetObj.Count – 1

[复制链接]

16

主题

59

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
123
发表于 2006-6-1 15:49:00 | 显示全部楼层 |阅读模式
各位高手:请问遍历选择集时循环为什么从0到SSetObj.Count – 1,而不是从1到SSetObj.Count?当然如用For……Each循环不存在这个问题。请参阅以下程序,先谢谢各位![B]
[B]用VBA清理空文本
Public Sub TextPurge()
Dim SSetObj As AcadSelectionSet       '创建名为TextPurge选择集
Set SSetObj = ThisDrawing.SelectionSets.Add("TextPurge")
'创建过滤器,仅选择Attdef(属性定义)、Text(单行文本)、Mtext(多行文本)
'关于过滤器的使用,请参考有关书籍
Dim fType(0) As Integer        '本句还可写成im fType(0 To 0) As Integer
Dim fData(0) As String         '本句还可写成im fData(0 To 0) As Variant
fType(0) = 0
fData(0) = "Attdef,Text,Mtext"
'选择全部的Attdef、Text、Mtext
SSetObj.Select acSelectionSetAll, , , fType, fData
If SSetObj.Count  0 Then
Dim i As Integer
For i = 0 To SSetObj.Count – 1[B]   '计数循环遍历选择集范例代码(一般提倡用For……Each循环)[B]
'在Attdef中显示的是TagString,在Text和Mtext中显示的是TextString
If TypeOf SSetObj(i) Is AcadAttribute Then
If SSetObj(i).TagString = "" Then SSetObj(i).Delete      '条件判断
Else
If SSetObj(i).TextString = "" Then SSetObj(i).Delete
End If
Next
End If
SSetObj.Delete
Set SSetObj = Nothing
End Sub
黄玉宏  2006.6.1


回复

使用道具 举报

25

主题

219

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2006-6-1 20:29:00 | 显示全部楼层
这就是一种规定,如VB中数组默认是从0开始,FROTRAN就是从1开始
回复

使用道具 举报

1

主题

17

帖子

1

银币

初来乍到

Rank: 1

铜币
21
发表于 2006-6-10 15:24:00 | 显示全部楼层
楼主,程序里只判断文本
If SSetObj(i).TextString = "" Then SSetObj(i).Delete
End If
如果有文本有多个空格的话,在图形中也是看不到,这样的文本应该没有办法删除吧???
回复

使用道具 举报

6

主题

17

帖子

3

银币

初来乍到

Rank: 1

铜币
41
发表于 2006-6-10 17:31:00 | 显示全部楼层
If Trim(SSetObj(i).TextString) = "" Then SSetObj(i).Delete
End If
这不就行了...
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 19:50 , Processed in 0.768923 second(s), 60 queries .

© 2020-2025 乐筑天下

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