删除很多同名块中的指定颜色和指定文字
以下是借用坛里大神的代码,在此感谢;我想删除很多同名块中的指定颜色和指定文字,请大神高抬贵手;Sub Example_Select()
On Error Resume Next
Dim ssetObj As AcadSelectionSet
Set ssetObj = ThisDrawing.SelectionSets.Add("sset")
If Err Then
Err.Clear
Set ssetObj = ThisDrawing.SelectionSets.Item("sset")
End If
ssetObj.Clear
Dim mode As Integer
Dim gpCode(0) As Integer
Dim dataValue(0) As Variant
gpCode(0) = 0
dataValue(0) = "insert"
Dim groupCode As Variant, dataCode As Variant
groupCode = gpCode
dataCode = dataValue
ssetObj.Select acSelectionSetAll, , , groupCode, dataCode
Dim i As Integer
Dim blkobj As AcadBlock, blkn As String
For i = 0 To ssetObj.Count - 1
Set blkobj = ThisDrawing.Blocks(ssetObj.Item(i).Name)
Ltoc blkobj
Next
ThisDrawing.Regen acActiveViewport
End Sub
Sub Ltoc(blk As AcadBlock)
Dim Sube As AcadEntity
For Each Sube In blk
Dim tekla As AcadText
If Sube.ObjectName = "AcDbBlockReference" Then
Ltoc ThisDrawing.Blocks(Sube.Name)
ElseIf Sube.ObjectName = "AcDbText" Then
Sube.Delete
End If
Next
End Sub 代码是删除块中所有文字吧?如果要删除指定颜色和内容的文字,在sube.delete前加一个判断,满足就删除。 mikewolf2k 发表于 2016-1-29 08:56 static/image/common/back.gif
代码是删除块中所有文字吧?如果要删除指定颜色和内容的文字,在sube.delete前加一个判断,满足就删除。
对的,代码是删文字的,;
原理捋顺了,删之前是判断sube吗?这个时候sube应该赋予什么属性?请指点 Sube.ObjectName = "AcDbText"
这里确定了sube是个text,源代码后面直接就删除了Sube.Delete。你要加条件的话,就再加个判断,比如if sube.color=1 or sube.text="aa" then sube.delete mikewolf2k 发表于 2016-1-29 10:05 static/image/common/back.gif
Sube.ObjectName = "AcDbText"
这里确定了sube是个text,源代码后面直接就删除了Sube.Delete。你要加条件的 ...
Sub Ltoc(blk As AcadBlock)
Dim Sube As AcadEntity
For Each Sube In blk
If Sube.ObjectName = "AcDbBlockReference" Then
Ltoc ThisDrawing.Blocks(Sube.Name)
ElseIf Sube.ObjectName = "AcDbText" Then
If Sube.Color = 5 Or Sube.text = "Tekla structures" Then
Sube.Delete
End If
End If
Next
End Sub这样增加判断后,任何内容都没删掉,If Sube.Color = 5 Or Sube.text = "Tekla structures" 应该是这段没将判断纳入选择集吧?
如果没记错的话,ThisDrawing.Blocks(Sube.Name)返回的是“源”块,也就是你输入i能选择的本文件存在的块,跟是不是插入毫无关系。
要修改插入的块,得遍历所有的块元素,然后再做。
你试下插入新块,看是不是符合内容的text已经被删除了? mikewolf2k 发表于 2016-1-29 10:46 static/image/common/back.gif
如果没记错的话,ThisDrawing.Blocks(Sube.Name)返回的是“源”块,也就是你输入i能选择的本文件存在的块, ...
按理说ElseIf Sube.ObjectName = "AcDbText" Then已经判断为文字了,为什么接着判断就不对了?
这个就有点迷糊了,还请能小敲一段 前面ThisDrawing.Blocks(Sube.Name)返回的是“源”块,所以改的也是“源”块的内容,图纸上任何东西都没改,当然看不出任何变化。说了你插入下新块看看。 mikewolf2k 发表于 2016-1-29 11:31 static/image/common/back.gif
前面ThisDrawing.Blocks(Sube.Name)返回的是“源”块,所以改的也是“源”块的内容,图纸上任何东西都没改, ...
这个有点不会了,4,5年没碰,忘了不少,希望您能帮个忙 yucc 发表于 2016-1-29 12:50 static/image/common/back.gif
这个有点不会了,4,5年没碰,忘了不少,希望您能帮个忙
做个过滤器,遍历所有的块,然后在这个集合中的块元素去做上面那些事。不要用ThisDrawing.Blocks(Sube.Name)。
页:
[1]
2