2016-05-24 2 views
0

Ребята У меня есть несколько элементов, содержащих некоторые дочерние элементы. Я должен изменить цвет некоторых родительских элементов (выбранных их именем) и всех их подэлементов (я не знаю их имен, а также идентификаторов, эти родительские элементы похожи на черные ящики) с VBA. У меня нет идеи, как это сделать. можешь мне помочь?Visio меняет цвет всех дочерних элементов с помощью VBA

+1

Добро пожаловать в StackOverflow. Проведите некоторое время и посетите [справочный центр] (http://stackoverflow.com/help/), чтобы привыкнуть к сайту. В частности, «[Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve)» и «[Как задать хороший вопрос?] (Http: // stackoverflow. com/help/how-to-ask) « – Spidey

ответ

0

Это довольно легко пройти дочерние формы в форме (особенно, если вы работаете только на одном уровне, а не вложенных дети):

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 
+0

Можете ли вы предоставить эту функцию? – inetphantom

Смежные вопросы