直接访问visio形状不起作用

时间:2013-04-28 08:42:09

标签: vba visio

我有一个关于访问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

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

2 个答案:

答案 0 :(得分:1)

这是一种可能性:

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

当您执行if ovs.name = "#shapename#" 时,如果您的模块中已定义Option Compare Text,那么它将进行不区分大小写的比较。

因此,在这种特殊情况下,如果以下属于以下情况,您可能会得到您描述的结果:

  1. 您已声明Option Compare Text
  2. 您正在搜索的形状名称的情况不匹配。例如,形状名为"#ShapeName#",但您正在搜索"#shapename#"
  3. 您是否可以发表评论以澄清其中是否有任何可能适用?

答案 1 :(得分:0)

你在哪里#shapename#from? 作为测试,在foreach ovs中,放入一个debug.print ovs.name来查看你在该集合中处理的名称。