AutoCAD VBA报错:删除指定图层未闭合多段线代码失效
问题原因
你遇到的类型错误是因为ModelSpace中包含多种类型的AutoCAD对象(比如直线、圆、文字等),而你直接用AcadLWPolyline类型的变量遍历所有对象,当循环到非多段线对象时,无法将其赋值给LWobj,从而触发类型不匹配错误。
修正后的代码
Sub clean() Dim obj As AcadObject Dim LWobj As AcadLWPolyline For Each obj In ThisDrawing.ModelSpace ' 先判断对象是否为多段线类型 If TypeOf obj Is AcadLWPolyline Then Set LWobj = obj ' 再判断闭合状态和所属图层 If Not LWobj.Closed And LWobj.Layer = "0_String" Then LWobj.Delete End If End If Next ' 所有对象处理完成后统一重生成视图,提升效率 ThisDrawing.Regen acActiveViewport End Sub
关键优化点
- 先通过
TypeOf obj Is AcadLWPolyline过滤出仅多段线对象,避免类型不匹配 - 将
Regen操作移到循环外,避免每次删除都刷新视图,大幅提升运行效率 - 用
Not LWobj.Closed替代LWobj.Closed = False,写法更简洁规范
内容的提问来源于stack exchange,提问作者Wessel1991
相关产品推荐
相关产品推荐

