С атрибутами получилось, все в порядке.
Но осталась главная проблема с переименованием.
Привожу свой код:
Public Sub ChangeCMB(X As Variant)
Dim props() As AcadDynamicBlockReferenceProperty
Dim prop As AcadDynamicBlockReferenceProperty
Dim i As Integer
Dim Attrs() As AcadAttributeReference
Dim Attr As AcadAttributeReference
Dim Dict As AcadDictionary
Dim acBlockName As String
Dim objBl As AcadBlock
Dim ent As AcadBlockReference
UserForm1.ListBox1.Clear
index = UserForm1.ComboBox1.ListIndex
UserForm1.ListBox1.AddItem ("Имя блока: " + entColl(index + 1).Name)
UserForm1.ListBox1.AddItem ("Слой: " + entColl(index + 1).Layer)
UserForm1.ListBox1.AddItem ("EffectiveName: " & entColl(index + 1).EffectiveName)
UserForm1.ListBox1.AddItem ("ObjectName: " & entColl(index + 1).ObjectName)
UserForm1.ListBox1.AddItem ("ObjectID: " & entColl(index + 1).ObjectID)
UserForm1.ListBox1.AddItem ("OwnerID: " & entColl(index + 1).OwnerID)
UserForm1.ListBox1.AddItem ("Координаты точки привязки:")
UserForm1.ListBox1.AddItem ("X: " & entColl(index + 1).InsertionPoint(0))
UserForm1.ListBox1.AddItem ("Y: " & entColl(index + 1).InsertionPoint(1))
UserForm1.ListBox1.AddItem ("Z: " & entColl(index + 1).InsertionPoint(2))
UserForm1.ListBox1.AddItem ("Свойства : ")
props = entColl(index + 1).GetDynamicBlockProperties
For i = LBound(props) To UBound(props)
Set prop = props(i)
UserForm1.ListBox1.AddItem ("PropertyName : " & prop.PropertyName & " Value : " & prop.Value)
Next i
UserForm1.ListBox1.AddItem ("Атрибуты : ")
Attrs = entColl(index + 1).GetAttributes
For i = LBound(Attrs) To UBound(Attrs)
Set Attr = Attrs(i)
UserForm1.ListBox1.AddItem ("TagString : " & Attr.TagString)
UserForm1.ListBox1.AddItem ("TextString : " & Attr.TextString)
' Переименование
acBlockName = entColl(index + 1).Name
If Attr.TextString Like "*МПВ*" Then
Set objBl = ThisDrawing.Blocks(entColl(index + 1).Name)
objBl.Name = "ВЭЗ"
End If
UserForm1.ListBox1.AddItem ("Constant : " & Attr.Constant)
UserForm1.ListBox1.AddItem ("Height : " & Attr.Height)
UserForm1.ListBox1.AddItem ("InsertionPoint X : " & Attr.InsertionPoint(0))
UserForm1.ListBox1.AddItem ("InsertionPoint Y : " & Attr.InsertionPoint(1))
UserForm1.ListBox1.AddItem ("InsertionPoint Z : " & Attr.InsertionPoint(2))
Next i
UserForm1.ListBox1.AddItem ("Dictionary : ")
If entColl(index + 1).HasExtensionDictionary Then
Set Dict = entColl(index + 1).GetExtensionDictionary
UserForm1.ListBox1.AddItem ("Name : " & Dict.Name)
End If
entColl(index + 1).Highlight (True)
End Sub
На файле примера он с успехом выполняется. Блоки (изначально имеющие одно и тоже имя переименовываются). Изменяется и .Name и .EffectiveName.
Однако, когда пытаюсь применить данный код к чертежу, построенному моей программой, переименовывается только первый блок! Затем выдается ошибка - "Дублирование данных". И вот здесь ничего не могу понять!
Все атрибуты, выдаваемые на экран этим кодом, одинаковые.
Вставку блока в своей программе делаю через
ThisDrawing.ModelSpace.InsertBlock p2, objWorksheet.Cells(i, 1).Value, 1, 1, 1, 0
Так в чем может быть причина?