Ты зря переделал мой код, я просто добавил имя блока
как *МПВ* и выбирал примитивы поштучно и похожие по
содержанию, т.е крестик и 2 текста, затем в следущем цикле
я переименовал их по отдельности и все пучком, а когда ты выбираешь из модели
там без разницы что выбралось, то с одним текстом, то с двумя, поэтому ничего не выйдет
короче код не сохранил, потом покажу
По-быстрому:
Option Explicit
''~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~''
Sub RenameBlocks()
Dim handleArr() As String
Dim oSset As AcadSelectionSet
Dim oEnt As AcadEntity
Dim pickPt As Variant
Dim blkRef As AcadBlockReference
Dim setName As String
Dim dxfcode(0 To 1) As Integer
Dim dxfdata(0 To 1) As Variant
dxfcode(0) = 0
dxfdata(0) = "INSERT"
dxfcode(1) = 2
Dim i As Integer
Dim bName As String
bName = "*МПВ*"
dxfdata(1) = bName
setName = "$Blocks$"
' удостоверяемся, что именованный выбор не существует
With ThisDrawing.SelectionSets
While .Count > 0
.Item(0).Delete
Wend
' создаем новый выбор
Set oSset = .Add(setName)
End With
oSset.SelectOnScreen dxfcode, dxfdata
'
If oSset.Count = 0 Then Exit Sub
Dim n
ReDim handleArr(0 To oSset.Count - 1)
For Each oEnt In oSset
Set blkRef = oEnt
'сохраняем хэндлы всех выбранных блоков в массив:
handleArr(n) = blkRef.Handle
'конвертируем вставку блока в анонимный блок
blkRef.ConvertToAnonymousBlock
n = n + 1
Next
' переименовываем блоки по одному или единичный блок если один
bName = ""
For n = LBound(handleArr) To UBound(handleArr)
Dim oObj As AcadObject
Set oObj = ThisDrawing.HandleToObject(handleArr(n))
Set blkRef = oObj
bName = InputBox(vbCr & vbCr & "Введи новое имя блока:", "Переименование блоков", "Предыдущее имя = " & bName)
On Error Resume Next
blkRef.ConvertToStaticBlock (bName)
If Err Then
Err.Clear
MsgBox "Блок с именем " & bName & "существует, выход..."
End If
On Error GoTo 0
blkRef.Update
Next
End Sub