Hallo zusammen,
ich fand jetzt folgende Lösung. Ein kleiner Ausflug in die VBA Welt hat mir weitergeholfen.
Hier wird nach der Deklarierung der Tabelle (MyTable), die Methoden SetBlockAttributeValue
und GetBlockAttributeValue eindeutig vorgeschlagen.
Voraussetzung für mein Beispiel ist, dass die Blockdefinition existiert und nur ein Attribut hat.
Auch wird nur die Zelle 1 0 geändert. Aber dies geht natürlich mit jeder Blockzelle.
(defun c:beattab (/ vgbl vblk tabe attid nstr ostr)
(vl-load-com)
(setq vgbl (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
(setq vblk (vla-item vgbl "Blockname"))
(vlax-for eblk vblk
(if (= (vla-get-objectname eblk) "AcDbAttributeDefinition")
(setq attid (vla-get-objectid eblk))
)
)
(setq tabe (vlax-ename->vla-object (car (entsel "\nSelect table: "))))
(setq nstr (getstring "\nNew attribut: "))
(setq ostr (vla-getblockattributevalue tabe 1 0 attid))
(vla-setblockattributevalue tabe 1 0 attid nstr)
)
; Oldstr = MyTable.GetBlockAttributeValue(1, 0, AttDef.ObjectID)
; MyTable.SetBlockAttributeValue 1, 0, AttDef.ObjectID, Newstr
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP