ладно. решил не париться.
создам вспомогательный массив структур с указателями на шейпы и именами в дереве-списке.
что-то типа:
Type myShape
sh as visio.shape
name as String
End Type
dim mycoll as new Collection
добавлять буду например так:
dim shp as myShape
set shp.sh = новый скопированный шейп
shp.name = (новый скопированный шейп).name
mycoll.add shp, CStr(ObjPtr(shp))
просто при добавлении нового шейпа буду указатель на него и новое имя добавлять в эту коллекцию, а при отмене находить по указателю в коллекции нужное имя и удалять из TreeView. не хотелось использовать костыли, ну да ладно.
плевать на этот метод Undo, какой-то он мутный.