Тема: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

ниправильна!
AcDbBlockReference - это тип объекта
Описания блоков объединены в коллекцию:
Thisdrawing.Blocks
надо выцепить нужное описание блока из этой коллекции и с ним работать
вот кусок рабочего кода:

Sub MirrorAnotationBlock(AnotBlkRef As AcadBlockReference)
 Dim AnotBlk As AcadBlock
 Dim BPnt As Variant
 Dim str1 As String
 Dim AnotText As AcadMText
 Dim eObj As AcadEntity
 Dim minP As Variant
 Dim maxP As Variant
 Dim MirPnt1(0 To 2) As Double
 Dim MirPnt2(0 To 2) As Double
 Dim ALine As AcadLine
 Dim sg As Integer
 Dim Width As Double
 Set AnotBlk = ThisDrawing.Blocks.Item(AnotBlkRef.Name)
 For Each eObj In AnotBlk
  Select Case TypeName(eObj)
   Case "IAcadMText2"
    Set AnotText = eObj
    Select Case AnotText.AttachmentPoint
     Case acAttachmentPointTopLeft
      sg = 1
      AnotText.AttachmentPoint = acAttachmentPointTopRight
      Exit For
     Case acAttachmentPointTopRight
      sg = -1
      AnotText.AttachmentPoint = acAttachmentPointTopLeft
      Exit For
    End Select
  End Select
 Next
end sub

В процедуру передается вхождение блока, которое я выбираю прямо на чертеже. по этому вхождению ищем описание
и далее работаем с ним

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

а как найти все блоки на чертеже и войти в них для редактирования

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

см. SelectionSet

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

Вот кусок кода. Работает. Однако в блоке текст не заменяется. В отладчике все путем.
Dim tmp As String
       Dim AnotBlk As AcadBlock
       Dim textObjMtext As AcadMText
       Dim textObjText As AcadText
       Dim count_block As Long
       Dim count_block_in_block As Long
       Dim i, j As Long
       count_block = ThisDrawing.Blocks.Count
      For i = 0 To count_block - 1
        Set AnotBlk = ThisDrawing.Blocks.Item(i)
        count_block_in_block = AnotBlk.Count
             For j = 0 To count_block_in_block - 1
                 type_objects = AnotBlk.Item(j).ObjectName
                 '-----------------------
                 '------------------Mtext
                 '-----------------------
                 If type_objects = "AcDbMText" Then
                   Set textObjMtext = AnotBlk.Item(j)
                   tmp = textObjMtext.TextString
                   tmp = ChangeChar(tmp)
                   textObjMtext.TextString = tmp
                 End If
                 '-----------------------
                 '-------------------Text
                 '-----------------------
                 If type_objects = "AcDbText" Then
                   Set textObjText = AnotBlk.Item(j)
                   tmp = textObjText.TextString
                   tmp = ChangeChar(tmp)
                   textObjText.TextString = tmp
                 End If
            Next j
      Next i

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

Вопрос
Почему не сохраняется изменненый текст в блоках

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

_regen из коммандной строки надо дать
а программно каждому объекту (которые есть BlockReference) .Update
или если меняется действительно много Thisdrawing.Application.Update

Re: TempEnt.ObjectName = "AcDbBlockReference" как войти в блок и отредактировать текст

_regen
СПАСИБО