这是一种变通方法。从函数中获得一个名称字符串,然后将其用于过滤器
- Function SelectDynamicByName(sName As String) As String
- Dim sArray As String
- Dim oBref As AcadBlockReference
- Dim SS As AcadSelectionSet
- sArray = sName
- Set SS = sset(2, "`*U*") 'Use a selectionset function
- For Each oBref In SS
- If oBref.IsDynamicBlock Then
- If oBref.EffectiveName = sName Then
- sArray = sArray & ",`" & oBref.Name
- End If
- End If
- Next
- SelectDynamicByName = sArray
- End Function
- Sub Test()
- Dim SS As AcadSelectionSet
- Set SS = sset(2, SelectDynamicByName("Door - Imperial"))
- Debug.Print SS.count
- End Sub
- Public Function sset(FilterType, FilterData As Variant, Optional ssName As String = "SS") As AcadSelectionSet
-
- Dim oSSets As AcadSelectionSets
- Set oSSets = ThisDrawing.SelectionSets
- For Each sset In oSSets
- If sset.Name = ssName Then
- sset.Delete
- Exit For
- End If
- Next
- Dim FType() As Integer
- Dim FData() As Variant
- Dim i As Integer
- If IsArray(FilterType) = False Then
- If IsArray(FilterData) = False Then
- ReDim FType(0)
- ReDim FData(0)
- FType(0) = FilterType
- FData(0) = FilterData
- Else
- Exit Function
- End If
- Else
- If UBound(FilterType) UBound(FilterData) Then
- Exit Function 'They must be pairs
- End If
-
- ReDim FType(UBound(FilterType))
- ReDim FData(UBound(FilterType))
- For i = 0 To UBound(FilterType)
- FType(i) = FilterType(i)
- FData(i) = FilterData(i)
- Next
- End If
-
- Set sset = ThisDrawing.SelectionSets.Add(ssName)
- sset.Select 5, FilterType:=FType, FilterData:=FData
- 'To use this function for single filter
- 'Set SS = SSet(0, "insert")
- 'For multiple filter
- 'Set SS = SSet(array(0,2),array("insert",oBlock.name)) 'must be pairs
-
- End Function
- End Sub
|