首页 > 解决方案 > 在 Visio 中更改形状颜色

问题描述

需要一些帮助!

在宏、VBA、脚本等方面,我比较了解,但 Visio 编码对我来说是一个全新的怪物。

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

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

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

'''

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

'''

标签: shapesvisiocolor-coding

解决方案


形状可以具有子形状,可根据您的代码通过 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


推荐阅读