以下代码运行不正常
Sub aa()
On Error GoTo errcontrol
   
    '创建选择集
    Set FilterSet = ThisDrawing.SelectionSets.Add("xxx")
    
    Dim FilterType(0 To 1) As Integer
    Dim FilterData(0 To 1) As Variant
    '设置过滤器类型
    FilterType(0) = 0
    FilterType(1) = 0
    '设置过滤数据
    FilterData(0) = "line"
    FilterData(1) = "arc"
    '使用过滤器,由用户在屏幕上选择
     FilterSet.SelectOnScreen FilterType, FilterData
     
     errcontrol:
   ThisDrawing.SelectionSets("xxx").DeleteEnd Sub
而这段代码却运行正常,
Sub aa()
On Error GoTo errcontrol
   
    '创建选择集
    Set FilterSet = ThisDrawing.SelectionSets.Add("xxx")
    
    Dim FilterType(0 ) As Integer
    Dim FilterData(0 ) As Variant
    '设置过滤器类型
    FilterType(0) = 0
        '设置过滤数据
    FilterData(0) = "line"
       '使用过滤器,由用户在屏幕上选择
     FilterSet.SelectOnScreen FilterType, FilterData 
errcontrol:
   ThisDrawing.SelectionSets("xxx").DeleteEnd Sub
那我想同时选择两种对象怎样写代码

解决方案 »

  1.   

     FilterType(0) = 0这是选择图元,如line,Arc 
    FilterData(0) = "line"也没错
    关键是line----你要选择line应该用Line和Arc
    这些数据你要从AutoCAd中的list命令copy,大小写不对就不对.
      

  2.   

    FilterType(0) = 8就是过滤图层的实体数据.   Dim FilterType(0 ) As Integer 
        Dim FilterData(0 ) As Variant 
        '设置过滤器类型 
        FilterType(0) = 0 
            '设置过滤数据 
        FilterData(0) = "line" 能通过吗? "Line"和"line"的区别.
    你这是autocad帮助文件的示例程序.
      

  3.   

    三楼,我试了,还是不行.如果我只过滤出直线或只过滤出圆弧,无论大小写"LINE""ARC""Line""Arc""line""arc"都能运行非常好,可一旦象上面我的第一个程序,二者都选时,就选不中任何一个,还是请大家帮我分析一下我到底错在哪了.
      

  4.   

    我用了好长时间都比较实用
    这比你的要求复杂多了,我有的是数组方法.
    Function ReturnAllSelectSet(fTypeArray As Variant, fDataArray As Variant) As AcadSelectionSet
        Dim Sset As AcadSelectionSet
        On Error Resume Next
        '建立选择集
        ThisDrawing.SelectionSets("mccad").Delete
        Set Sset = ThisDrawing.SelectionSets.Add("mccad")
        '建立过滤器
        Dim fType, fData
        ReDim fType(0 To UBound(fTypeArray) + 2) As Integer
        ReDim fData(0 To UBound(fDataArray) + 2) As Variant
        fType(0) = -4
        For ii = 0 To UBound(fTypeArray)
          fType(ii + 1) = fTypeArray(ii)
        Next ii
        fType(UBound(fType)) = -4
        ''
        fData(0) = "<Or"
        For ii = 0 To UBound(fDataArray)
          fData(ii + 1) = fDataArray(ii)
        Next ii
        fData(UBound(fData)) = "Or>"
        ''
        '选择过滤出图形中所有的标注对象
        Sset.Select acSelectionSetAll, , , fType, fData
        Set ReturnAllSelectSet = Sset
    End Function
      

  5.   

    ningyong58 :我在读您的程序,应该是很完善,我得静下心来读,在这期间希望您还是实际运行一下我写的那个有问题的程序,帮我找一下问题所在,再按我的意思改一下.谢谢!
      

  6.   

    分析六楼的代码后,我把程序这样改了,成功了:
    Sub aa() 
    On Error GoTo errcontrol 
      
        '创建选择集 
        Set FilterSet = ThisDrawing.SelectionSets.Add("xxx") 
        
        Dim FilterType(0 To 3) As Integer 
        Dim FilterData(0 To 3) As Variant 
        '设置过滤器类型 
        FilterType(0) = -4 
        FilterType(1) = 0
        FilterType(2) = 0
        FilterType(3) = -4 
        '设置过滤数据
        FilterData(0) = "<or" 
        FilterData(1) = "line" 
        FilterData(2) = "arc" 
        FilterData(3) = "or>" 
        '使用过滤器,由用户在屏幕上选择 
        FilterSet.SelectOnScreen FilterType, FilterData 
    errcontrol: 
      ThisDrawing.SelectionSets("xxx").Delete End Sub 
    还是要感谢ningyong58 ,给你加分