我遇到了与工作相关的问题,因此无法附加示例文件。
我使用动态形状作为图表的一部分,用户可以更改形状数据(即更改类别),形状的颜色也会随之改变。此机制位于 ShapeSheet 中。
关键数据 (Prop.Category) 是来自固定选项列表的索引。用户字段 (User.ForeColour) 使用 Prop.Category 数据从另一个固定列表 (另一个索引/查找公式) 确定 RGB 颜色值。我已将 FillForegnd 设置为直接访问 User.ForeColour。
在我这里的示例中,用户选择 Prop.Category #3,这会间接将 User.ForeColour 设置为 RGB(128,0,128)。但是,在我当前的文件设置中,FillForegnd 随后设置为 RGB(64,86,150)。当我选择其他类别时,FillForegnd 值也会从预期值发生变化。
我使用公式和值视图检查了 ShapeSheet。一切都正确(除了 FillForegnd 中的最终值)。仔细检查 User.ForeColour 发现它按预期保存了值 RGB(128,0,128)。
有趣的是,如果我用静态值 RGB(128,0,128) 覆盖 User.ForeColour 中的公式,FillForegnd 会正确填充,形状也会显示正确的颜色。返回公式(最终仍为正确值),FillForegnd 再次填充了错误的 RGB 值。
我已经检查并删除了主题,但这没有任何影响。
Visio 2010,联网的 Windows 7 环境。
我尝试在另一个系统上的新文件中复制该问题(以便获得可上传的示例),但没有成功。具有原始主形状的文件仍按预期工作。具有复制形状(默认情况下为复制的主形状)的新文件有问题。我仔细检查了 ShapeSheet,默认/主设置符合预期(黑色文本),定制选项(蓝色文本)也符合预期。
答案1
visguy 论坛上的好心人提供了足够的见解来解决我在这里提出的问题。
该User.Forecolour
属性使用公式 ( INDEX(...)
) 来确定所需的颜色值。这种公式的使用与单元格不相符FillForegnd
。
存在三种简单的解决方案。两种解决方案都使用SETF(...)
FillForegnd 指向公式而不是公式。
- 属性
User.Forecolour
可以使用SETF(GetRef(FillForegnd),INDEX(...))
。这会强制将值放入FillForegnd
,这是对原始代码最简单的修改。缺点是用户对形状本身的任何修改都会覆盖单元格FillForegnd
,直到用户再次选择正确的形状数据时才会更正。 User.X
可以创建一个额外的单元格。SETF
答案 1 中的 会GetRef(User.X)
改为。FillForegnd
将包含Guard(User.X)
。这将阻止用户随机更改颜色。- 第三个选项扩展了前面两个答案。在
User.ForeColour
:=SETF(GetRef(FillForegnd),"GUARD(INDEX(...))")
。这将GUARD
根据需要在前景色区域中设置。
所有这些解决方案都利用了SETF
可以覆盖具有的单元格的特性GUARD
,但是 GUI(形状页面区域)中的正常用户干预却不能。