Visio形状ID溢出

时间:2015-09-02 02:41:55

标签: vba com visio

Visio Page对象的SetFormulas和GetResults方法需要一个包含ShapeID,Section,Row,Column的数组,以便批量读取/写入结构表。

但是,我发现在具有大量形状的图形中,在添加和删除形状之后,Visio的形状ID跨越32768的短整数限制。似乎Visio在名为ID16的形状上保留了一个短的整数ID属性,但是通过ID16,ShapeID,Section,Row,Column数组似乎不起作用,并引发“意外的文件结束”错误。

在形状ID超过短整数限制的图纸上,是否有可能以某种方式使用SetFormulas和GetResults方法?或者有没有办法在图纸中“重新堆叠”形状ID,只要页面中的形状少于32768,那么所有ID都将低于限制?我知道将所有形状复制到一个新的图形中会花费一些时间,但是在添加/删除页面中的形状后,问题很快就会重现,我的软件会做很多事情。

我能想到的唯一另一种选择是捕获形状ID超过短整数限制的情况,并恢复到按单元格和形状逐行进行操作的例程,而不是单个批处理。

1 个答案:

答案 0 :(得分:0)

我担心没有解决方案,Microsoft 需要创建 SetResults/GetResults/SetFormulas/Getformulas/DropMany 的 Int32 版本。

随着 PC 的速度越来越快,创建巨大的 Visio 图表变得更加容易。

将图表重新渲染到新页面确实有助于赢得一些时间,但 16 位形状 ID(实际上是 15 位限制)在 2021 年有点愚蠢!