mayuezxl 发表于 2006-8-4 09:57:00

[VBA]关于图层删除的问题

<P>Private Sub CommandButton3_Click()<BR>Dim s<BR>s = MsgBox("你正在删除所写数字及所在层吗?", vbOKCancel, "提示")<BR>If s = vbOK Then<BR>&nbsp;&nbsp; Dim L As AcadLayer<BR>&nbsp;&nbsp; Set L = ThisDrawing.Layers("wzl")<BR>&nbsp;&nbsp; ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")<BR>&nbsp;&nbsp;&nbsp; Dim E As AcadEntity<BR>&nbsp; For Each E In ThisDrawing.ModelSpace<BR>&nbsp;&nbsp;&nbsp; If E.Layer = "wzl" Then<BR>&nbsp;&nbsp;&nbsp;&nbsp; E.Delete<BR>&nbsp;&nbsp;&nbsp; End If<BR>&nbsp; Next<BR>&nbsp;L.Delete<BR>&nbsp;ThisDrawing.Regen acActiveViewport<BR>End If<BR>End Sub</P>
<P>这个程序是先遍历整个图形空间,当碰到要删除图层中的对象时,删除该对象,然后删除图层。可是当图形空间中对象很多时(超过一百多万),要等很久才能删除图层。请问如何才能直接删除要删除图层中的对象,而不是遍历整个图形空间。谢谢各位高手的帮忙!</P>

wyj7485 发表于 2006-8-4 11:58:00

建立选择集,用选择集的delete属性

mayuezxl 发表于 2006-8-4 14:51:00

怎么建立要删除图层的选择集呢?

wyj7485 发表于 2006-8-4 15:57:00

本帖最后由 作者 于 2006-8-4 23:30:47 编辑 <br /><br /> <P>Sub test()</P>
<P>On Error Resume Next</P>
<P>Dim FilterType(0) As Integer<BR>Dim FilterData(0) As Variant</P>
<P>Dim Myset As AcadSelectionSet</P>
<P>FilterType(0) = 8: FilterData(0) = LayerName</P>
<P>ThisDrawing.SelectionSets.Item("Myset").Delete<BR>Set Myset = ThisDrawing.SelectionSets.Add("Myset")<BR>Myset.Select acSelectionSetAll, , , FilterType, FilterData</P>
<P>Myset.Erase</P>
<P>End Sub</P>
<P>,LayerName不能为当前层</P>

mayuezxl 发表于 2006-8-4 20:35:00

<P>按照你的方法,我没法删除指定图层中的对象啊</P>

wyj7485 发表于 2006-8-4 23:32:00

应该是选择集的Erase属性,已该.

mayuezxl 发表于 2006-8-5 09:18:00

谢谢楼上的,按照你的指示,我已经实现了。万分感谢!那再请教一下,用Delete可以实现什么效果?

jxh2003zfr 发表于 2006-8-8 08:51:00

wyj7485发表于2006-8-4 23:32:00static/image/common/back.gif应该是选择集的Erase属性,已该.

我在使用选择集的Erase方法时有时会出错,必须要改为循环一个一个删除才可以(foreach obj in ssel),这是为什么呢?<BR>

wyj7485 发表于 2006-8-8 11:43:00

jxh2003zfr发表于2006-8-8 8:51:00static/image/common/back.gif我在使用选择集的Erase方法时有时

<BR>
页: [1]
查看完整版本: [VBA]关于图层删除的问题