黄玉宏 发表于 2006-6-1 15:49:00

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

各位高手:请问遍历选择集时循环为什么从0到SSetObj.Count – 1,而不是从1到SSetObj.Count?当然如用For……Each循环不存在这个问题。请参阅以下程序,先谢谢各位!
用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.Count0 Then
Dim i As Integer
For i = 0 To SSetObj.Count – 1   '计数循环遍历选择集范例代码(一般提倡用For……Each循环)
'在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


fjfhgdwfn 发表于 2006-6-1 20:29:00

这就是一种规定,如VB中数组默认是从0开始,FROTRAN就是从1开始

peicong 发表于 2006-6-10 15:24:00

楼主,程序里只判断文本
If SSetObj(i).TextString = "" Then SSetObj(i).Delete
End If
如果有文本有多个空格的话,在图形中也是看不到,这样的文本应该没有办法删除吧???

login1986 发表于 2006-6-10 17:31:00

If Trim(SSetObj(i).TextString) = "" Then SSetObj(i).Delete
End If
这不就行了...
页: [1]
查看完整版本: [求助]遍历选择集时循环为什么从0到SSetObj.Count – 1