0

我有一个关于在 visio 2003 中访问形状的问题

...
dim ovp as visio.page
dim ovs as visio.shape
...
set ovs = ovp.shapes("#shapename#")
...do something with the shape

这有时不起作用!

它给出了类似shape not found或类似的错误

...
dim ovp as visio.page
dim ovs as visio.shape
...
for each ovs in ovp.shapes

   if ovs.name = "#shapename#" then
   ...do something with the shape

   end if

next

这总是有效的。知道为什么吗?

4

2 回答 2

1

这是一种可能性:

当您这样做时set ovs = ovp.shapes("#shapename#"),VBA 会以区分大小写的方式寻找形状名称的完全匹配。

当你这样做if ovs.name = "#shapename#" 并且如果你Option Compare Text在你的模块中定义了,那么它会做一个不区分大小写的比较。

因此,在那种特定情况下,如果以下两个都为真,您可能会得到您描述的结果:

  1. 你已经声明Option Compare Text
  2. 您正在搜索的形状名称不匹配。例如,形状已命名"#ShapeName#",但您正在搜索"#shapename#".

您能否发表评论以澄清这是否适用?

于 2013-04-28T09:16:00.083 回答
0

你从哪里得到#shapename#?作为测试,在 foreach ovs 中,放置一个 debug.print ovs.name 以查看您在该集合中处理的名称。

于 2013-04-28T16:24:49.580 回答