Доброго времени суток!
Есть динамические блоки "Рамка", с атрибутом "№" отвечающим за номер листа
следующий код меняет значение атрибута № второй рамки на формулу "№ первой рамки +1 "
Sub listplus()
'переменные
Dim ss As AcadSelectionSet
Dim idatt As String
Dim str1 As String
Dim str2 As String
Dim selobj As AcadEntity
Dim dynblock As AcadBlockReference
str1 = "%<\AcExpr (%<\AcObjProp Object(%<\_ObjId "
str2 = ">%).TextString>%+1)>%"
'выбор первого блока с которого считывается id атрибута номера
On Error Resume Next
ThisDrawing.SelectionSets("SS").Delete
Set ss = ThisDrawing.SelectionSets.Add("SS")
ss.SelectOnScreen
For Each selobj In ss
If selobj.ObjectName = "AcDbBlockReference" Then
Set dynblock = selobj
If dynblock.EffectiveName = "Рамка" Then
atr = dynblock.GetAttributes
For i = LBound(atr) To UBound(atr)
If atr(i).TagString = "№" Then
idatt = atr(i).ObjectID
End If
Next
End If
End If
Next
'выбор 2 блока куда записывается формула
ThisDrawing.SelectionSets("SS").Delete
Set ss = ThisDrawing.SelectionSets.Add("SS")
ss.SelectOnScreen
For Each selobj In ss
If selobj.ObjectName = "AcDbBlockReference" Then
Set dynblock = selobj
If dynblock.EffectiveName = "Рамка" Then
atr = dynblock.GetAttributes
For i = LBound(atr) To UBound(atr)
If atr(i).TagString = "№" Then
atr(i).TextString = str1 & idatt & str2
End If
Next
End If
End If
Next
ThisDrawing.Regen acActiveViewport
End Sub
В принципе все работает но
последняя команда регенерации обновляет весь чертеж, что занимает время да и зачем его обновлять если поменялся всего один атрибут в конкретном блоке?
есть же замечательная команда _updatefield, так вот как можно прикрутить эту команду к коду? попробовал просто запуск команды через командную строку, но тогда как указать команде что обновлять надо именно 2 блок? то есть SelectionSets есть а как его прикрутить в команду не пойму
и еще вопрос, можно ли как то вставить в командную строку комментарий-запрос о том что именно надо выбрать при выборе 1 и 2 блоков, как например это происходит при запросе точки ThisDrawing.Utility.GetPoint(, "Выберите точку")?