Visio使用VBA更改所有子元素的颜色

时间:2016-05-24 12:11:52

标签: vba visio

伙计我有几个包含一些子元素的元素。我必须使用VBA更改某些父元素的颜色(通过其名称选择)和它们的所有子元素(我不知道它们的名称,也不知道ID,这些父元素就像黑盒子)。我不知道如何做到这一点。你能救我吗?

1 个答案:

答案 0 :(得分: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