Shapesheet 中的 FillForegnd 使用错误的数据

Shapesheet 中的 FillForegnd 使用错误的数据

我遇到了与工作相关的问题,因此无法附加示例文件。

我使用动态形状作为图表的一部分,用户可以更改形状数据(即更改类别),形状的颜色也会随之改变。此机制位于 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 指向公式而不是公式。

  1. 属性User.Forecolour可以使用SETF(GetRef(FillForegnd),INDEX(...))。这会强制将值放入FillForegnd,这是对原始代码最简单的修改。缺点是用户对形状本身的任何修改都会覆盖单元格FillForegnd,直到用户再次选择正确的形状数据时才会更正。
  2. User.X可以创建一个额外的单元格。SETF答案 1 中的 会GetRef(User.X)改为。FillForegnd将包含Guard(User.X)。这将阻止用户随机更改颜色。
  3. 第三个选项扩展了前面两个答案。在User.ForeColour=SETF(GetRef(FillForegnd),"GUARD(INDEX(...))")。这将GUARD根据需要在前景色区域中设置。

所有这些解决方案都利用了SETF可以覆盖具有的单元格的特性GUARD,但是 GUI(形状页面区域)中的正常用户干预却不能。

相关内容