【问题标题】:Changing Shape Color in Visio在 Visio 中更改形状颜色
【发布时间】:2020-05-14 05:49:37
【问题描述】:

需要帮助!

我在宏、VBA、脚本等方面知识渊博,但 Visio 编码对我来说是一个全新的怪物。

简而言之,我有一个带有简单方形标记产品位置的仓库地图布局,我想根据它们的 Prop._VisDM_F2 数据元素对方形进行颜色编码。到目前为止,我的代码似乎有效,但仅适用于正方形组中的第一个形状,但有时主形状由 1 个正方形组成,有时是 6 个,以及介于两者之间的所有内容。

我了解到“Shapes(#)”中的 # 选择更改哪个方格,但我希望它们 ALL 更改。我试图计算每个主形状中有多少个单独的形状,以使用可变整数作为 #,但它不起作用。

当然,这么简单的任务不可能真的这么复杂,所以我可能只是错过了一些步骤。任何帮助将不胜感激!

'''

Dim selectObj As Visio.Shape

For Each selectObj In ActiveWindow.Selection
If selectObj.CellExistsU("Prop._VisDM_F2", Visio.VisExistsFlags.visExistsAnywhere) Then
selectObj.Shapes(1).Cells("Fillforegnd").FormulaU = visWhite
End If
Next

End Sub

'''

【问题讨论】:

    标签: shapes visio color-coding


    【解决方案1】:

    形状可以有子形状,可根据您的代码通过 Shapes 属性访问(请注意,大多数 Visio 集合都是基于 1 而不是 0)。

    您可以通过索引或进一步为每个子形状集合寻址。因此,鉴于您可能知道也可能不知道子形状的深度,您可以通过它们进行递归,如下所示:

    Sub ApplyFillToAll()
    
    Dim shp As Visio.Shape
    
    For Each shp In ActiveWindow.Selection
        If shp.CellExistsU("Prop._VisDM_F2", Visio.VisExistsFlags.visExistsAnywhere) Then
            SetFill shp, "RGB(255,0,0)"
        End If
    Next
    
    End Sub
    
    Public Sub SetFill(ByRef shpIn As Visio.Shape, fillFormula As String)
    
    Dim shp As Visio.Shape
    
    For Each shp In shpIn.Shapes
        shp.Cells("FillForegnd").FormulaU = fillFormula
        SetFill shp, fillFormula
    Next
    
    End Sub
    

    请注意,您设置的公式是一个字符串,因此用双引号括起来,上面将设置所有子形状为红色,SetFill 方法调用自身以在树中向下导航。

    我将添加一个非常古老的帖子的链接,您可能也会觉得它有用:

    https://visualsignals.typepad.co.uk/vislog/2007/11/looping-through.html

    【讨论】:

    • 太棒了。很高兴这对你有用。如果您可以将答案标记为已接受,那将非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多