好的,Col,
我只需要添加一个
出错时,将下一条语句恢复到代码中
请参见红色
- Sub ChangeLayName()
- Dim lay As AcadLayer
- Dim crLayNames As String
- Dim nwLayNames As String
- 'Find and replace Layer name
- For Each lay In ThisDrawing.Layers
- If Not lay.Name = "0" Then 'Filter out Layer 0
- If Not lay.Name = "defpoints" Then 'Filter out Layer defpoints
- crLayNames = lay.Name
- 'Starting from char 1 of string variable crLayNames, if string "Text" is found then
- If InStr(1, crLayNames, "Text", vbTextCompare) Then
- 'Replace string "Text" w\ "Text_Hadrian"
- [color=red]On Error Resume Next[/color]
- nwLayNames = Replace(crLayNames, crLayNames, "Text_Hadrian", , , vbTextCompare)
- lay.Name = nwLayNames
- Debug.Print "Layer " & crLayNames & " has been changed to " & nwLayNames
- End If
- End If
- End If
- Next lay
- Set lay = Nothing
- End Sub
很抱歉,我没有看到,但如果在图形中同时存在图层文字和图层文字,则会出现该错误。
每个图形只能有一个Text\u Hadrian层。
上面的代码解决了这个问题。
看看我的这句话:
- Debug.Print "Layer " & crLayNames & " has been changed to " & nwLayNames
如果你只有一个图层文本,那么在即时窗口打开的情况下,运行代码,你就会得到这个结果。
- Layer TEXT has been changed to Text_Hadrian
如果layer Text\u Hadrian已经存在,您将得到这个
- Layer Text_Hadrian has been changed to Text_Hadrian
无论出于何种目的,这都是好的。
如果图形中同时存在layer TEXT和TEXT_Hadrian,则除了指示VBA忽略错误并继续执行代码外,您无能为力。
无论如何
我想以上就是你想要的。
如果你有任何其他问题,请告诉我
别紧张,上校!
毫升 |