shapes - 在 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
'''
解决方案
形状可以具有子形状,可根据您的代码通过 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
推荐阅读
- drake - 从 state_output 转换为 RollPitchYaw 时变量 u0_0 没有条目
- buildfire - Buildfire:链接到内部页面/插件
- angular - GoCD - Angular Build 无法执行
- javascript - 如何在 2 个多维数组中找到共同值
- r - 如何缓解线性模型函数中的“可变长度不同”错误
- python-3.x - Python teradata 连接异常 - UdaExec 属性
- node.js - Firebase nodejs 服务错误“AssertionError [ERR_ASSERTION]:缺少路径”
- docker - 在多阶段 Docker 构建中持久化 ENV 变量
- winapi - CComPtr 解构函数导致读取访问冲突
- php - 如何修复“imap_utf8”不适用于 php imap 中的电子邮件正文