Visio меняет цвет всех дочерних элементов с помощью VBA
Ребята, у меня есть несколько элементов, которые содержат некоторые дочерние элементы. Мне нужно изменить цвет некоторых родительских элементов (выбранных по их имени) и всех их подэлементов (я не знаю ни их имен, ни идентификаторов, эти родительские элементы похожи на черные ящики) с VBA. Я понятия не имею, как это сделать. вы не могли бы мне помочь?
1 ответ
Решение
Довольно просто пройти дочерние фигуры в форме (особенно если вы работаете только на одном уровне, а не во вложенных дочерних):
Dim ParShp as Visio.Shape
Set ParShp = ActivePage.Shapes("ShapeName")
Dim ShpObj as Visio.Shape
For Each ShpObj in ParShp.Shapes
ShpObj.CellsU("FillForegnd").FormulaU = "RGB(0,0,0)"
Next ShpObj
Чтобы иметь дело с вложенными дочерними элементами, у меня есть функция, которая просто рекурсивно проходит по всем дочерним элементам и возвращает плоскую коллекцию всех дочерних фигур. Ниже без обработки ошибок:
Public Function GetAllSubShapes(ShpObj As Visio.Shape, SubShapes As Collection, Optional AddFirstShp As Boolean = False)
If AddFirstShp Then SubShapes.Add ShpObj
Dim CheckShp As Visio.Shape
For Each CheckShp In ShpObj.Shapes
SubShapes.Add CheckShp
Call GetAllSubShapes(CheckShp, SubShapes, False)
Next CheckShp
End Function