прямой доступ к форме 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

Это всегда работает. Есть идеи, почему?


person Georg Lackner    schedule 28.04.2013    source источник


Ответы (2)


Вот возможность:

Когда вы выполняете set ovs = ovp.shapes("#shapename#"), VBA ищет точное совпадение имени формы с учетом регистра.

Когда вы выполняете if ovs.name = "#shapename#" и, если в вашем модуле определено Option Compare Text, тогда сравнение будет выполняться без учета регистра.

Таким образом, в этой конкретной ситуации вы можете получить описанные вами результаты, если выполняются оба из следующего:

  1. Вы объявили Option Compare Text
  2. У вас есть несоответствие в случае имени формы, которую вы ищете. Например, фигура называется "#ShapeName#", но вы ищете "#shapename#".

Можете ли вы прокомментировать, чтобы уточнить, может ли что-либо из этого применяться?

person Roger Rowland    schedule 28.04.2013
comment
У меня нет доступа к Visio в течение следующих дней, но, скорее всего, причина в этом. - person Georg Lackner; 28.04.2013

Откуда вы берете #shapename#? В качестве теста внутри foreach ovs поместите debug.print ovs.name, чтобы увидеть, с какими именами вы имеете дело в этой коллекции.

person John Visio MVP    schedule 28.04.2013