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
Другие вопросы по тегам