SelectOnScreen的问题
我想把某一图层上的所有entity的加入到我定义的一个选择集中,我该怎么办呢?我试用了以下语句:
ssetobj.SelectOnScreen 8, “Layler1”
没成功,提示我有错误:Error#-2147467259 ACADProject方法'SelectOnScreen'作用于对象'IAcadSelectionSet'时失败,这是为什么呢? Sub SelOnScrLayer()
Dim ssetobj As AcadSelectionSet
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
On Error Resume Next
Set ssetobj = ThisDrawing.SelectionSets.Add("a")
If Err Then
Err.Clear
Set ssetobj = ThisDrawing.SelectionSets.Item("a")
End If
ssetobj.Clear
FilterType(0) = 8
FilterData(0) = "Layler1"
ssetobj.SelectOnScreen FilterType, FilterData
Debug.Print ssetobj.Count
Debug.Print ssetobj.Item(0).ObjectName
End Sub ssetobj.SelectOnScreen 后面的参数是数组变量,否则会出错;
有不少的问题贴子,很多情况下是没有仔细查看对象模型中函数的使用规则. 还是不行呀,还是作用在IAcadSelectionSetf对象时失败 程序是正确的,而且在2002及2004中都能正常运行。
你需要看看其它方面的,把你的程序贴出来。 我用的是ACAD2000,这是不是原因呢? 这是我程序中用到SelectOnScreen的那一段:
If (nPaperType = 3) Then
Dim ssetobj As AcadSelectionSet '设置选择对象
Set ssetobj = ThisDrawing.SelectionSets.Add("pmbj_SSET")
ssetobj.Clear
MsgBox "ssetobj的名字是:" & ssetobj.Name
MsgBox "当前图层是:" & ThisDrawing.ActiveLayer.Name'当前图层就是PMBJ
Dim stype(0) As Integer
Dim sdata(0) As Variant
stype(0) = 8
sdata(0) = "PMBJ"
ssetobj.SelectOnScreen stype, sdata'当程序执行到这儿时,就提示出错:作用失败,无法再继续下去,why???
ssetobj.Update
point1(0) = BaseX + constLeftWidth
point1(1) = BaseY - constTopLen
Dim entry As AcadEntity
For Each entry In ssetobj
entry.Color = 5
entry.Rotate point1, 1.5707962 '旋转90度
entry.Update
Next entry
End If
dim ssetobj as acadselectionset '设置选择对象
set ssetobj = thisdrawing.selectionsets.add("pmbj_sset")
ssetobj.clear
之前有没有使用 On Error Resume Next,因为不能创建同名的选择集,所以如果名称为pmbj_sset的选择集已经存在。那么set ssetobj = thisdrawing.selectionsets.add("pmbj_sset")这句就发生错误了,后面的当然也都是错的了。 我也用版主zeng29的方法做过,也就是在调用方法selectonscreen之前,加了下面这段语句:
On Error Resume Next
Set ssetobj = ThisDrawing.SelectionSets.Add("pmbj_SSET")
If Err Then
Err.Clear
Set ssetobj = ThisDrawing.SelectionSets.Item("pmbj_SSET")
End If
结果我用ssetobj.count一测试,ssetobj.count=0也就是说选择集中有0个元素
这是为什么?真的无可救要了吗? 选择时选中的实体有没有出现高亮的状态,选择也跟层的设置状态有关,像冻结之类的可能就不能选择。