All Forums
 Категория Visio
 Форум Вопросы и ответы
 Таки еще вопрос по обращению к шейпу
Author Previous Topic Topic Next Topic  

Dimas

4 Posts

Posted - 12/27/2003 :  07:04:04
Есть созданный мастер-шейп с кучей Custom Properties. Напр., именуемый в шейп-листе как Spec.3
Чтобы извлечь нужное свойство, я пишу в Custom formula:
=Spec.3!Prop.XXX.
Это работает в пределах страницы
Чтобы обратиться к нему с другой страницы, я, ессно, пишу
=Pages[Page-X]!Spec.3!Prop.XXX
в ответ - Bad ShapeSheet name...
интересно, что с не-мастер шейпом, т.е. именуемым Sheet.XX все работает... Где загвоздка?
З.Ы. Сорри за столь наивные вопросы по синтаксису, но толкового руководства под рукой нет... может, подскажете, где взять?
З.З.Ы. MS Visio 2002

Tumanov

Russia
1198 Posts

Posted - 12/27/2003 :  11:26:29
Похоже, что здесь в Visio 2002 просто присутствует ошибка. Я, правда, не наталкивался до этого на нее, потому что стараюсь использовать ссылки только вверх или в сторону, но не вверх-вниз, как в данном случае.
Вот что я сейчас высмотрел.
Помещаем на Page-1 прямоугольник и два шейпа Triangle.
Первый из них отзывается на:
Sheet.2
Triangle
Второй на:
Sheet.3
Triangle.3
С первой страницы работают ссылки на Triangle.3!Width и Sheet.3!Width. Причем при попытке ввести ссылку Sheet.3!Width она автоматически заменяется на Triangle.3!Width. То есть Visio так сказать "помогает" пользователю.
Даем второму треугольнику еще и уникальное имя, например sh1. Теперь он отзывается на:
Sheet.3
sh1
Подмена идет уже на sh1.

Начинаем на него ссылаться с Page-2 и видим, что при вводе
=Pages[Page-1]!Sheet.3!Width подмена идет уже на =Pages[Page-1]!Triangle.3!Width, а не на =Pages[Page-1]!sh1!Width, как на первой странице.
Эта ссылка еще работает.
Но! Повторно ее ввести нельзя! То есть, при попытке самому ввести =Pages[Page-1]!Triangle.3!Width получаешь ошибку.
Более того. Если этот файл сохранить не в .vsd, а в .vdx, то Visio уже не может его прочитать. Говорит, что формула сломана и он ее изменяет на 0.

Вывод:
1. Желательно при ссылках в Visio 2002 избегать обратного движения по дереву. То есть, если уж Вы сослались на другую страницу (вверх по дереву), то не опускаться до ее шейпов.
2. Если такая ссылка все-таки нужна, то стараться использовать неименованные шейпы, чтобы Visio не имел возможности "помочь" Вам в духе Microsoft.
3. Проверить, как это работает в Visio 2003. Ошибка настолько явная, что там она вполне может быть уже исправлена.

В общем-то я в этом не совсем уверен, поэтому хотелось бы слышать или подтверждения, или опровержения...
Go to Top of Page

Dimas

4 Posts

Posted - 12/27/2003 :  11:52:13
Все точно так и происходит, как Вы описали... Так что использую неименованные шейпы, что, в общем-то, особого неудобства не представляет...
Вообще, работаю с Visio еще с версии 2.0, но, в силу несущественности задач а также природной лени , использовать его не просто как векторный редактор начал только что... Поэтому интересует любая конкретная информация по автоматизации в Visio, а не просто перечисление возможностей... Встроенная справочная система, имхо, оставляет желать лучшего...
Go to Top of Page

Digitall

Russia
389 Posts

Posted - 12/29/2003 :  08:19:47  Visit Digitall's Homepage
quote:
Originally posted by Tumanov

Похоже, что здесь в Visio 2002 просто присутствует ошибка.
Вывод:
1. Желательно при ссылках в Visio 2002 избегать обратного движения по дереву. То есть, если уж Вы сослались на другую страницу (вверх по дереву), то не опускаться до ее шейпов.
2. Если такая ссылка все-таки нужна, то стараться использовать неименованные шейпы, чтобы Visio не имел возможности "помочь" Вам в духе Microsoft.
3. Проверить, как это работает в Visio 2003. Ошибка настолько явная, что там она вполне может быть уже исправлена.

В общем-то я в этом не совсем уверен, поэтому хотелось бы слышать или подтверждения, или опровержения...



1) Честно говоря это не ошибка. Ссылка по имени "Shapename.ID!Cellname" работает только в пределах листа! Это явно прописано в DVS.pdf p.74 "Rules for cell references in formulas".
2) В остальных случаях используется "Sheet.ID!Cellname"
3) В Visio 2003 все работает с той же "ошибкой".


Если нет Developing Visio Solutions, то вот ссылка.
http://www.math.hcmuns.edu.vn/Public/Soft/WinSoft/Visio2000/Docs/DVS.pdf
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 12/29/2003 :  15:13:07
Ошибкой я называю ту "помощь", которую пытается оказать Visio, заменяя Sheet.ID на Shapename.ID в том случае, когда эта замена недопустима!
То есть пользователь пишет правильную ссылку, Visio заменяет ее на неправильную, а после сохранения отказывается работать с таким документом (через XML).
Go to Top of Page

GDK

Russia
90 Posts

Posted - 11/29/2010 :  07:44:02
1) Ссылка по имени "Shapename.ID!Cellname" работает в пределах листа.

2) В остальных случаях используется "Sheet.ID!Cellname" - а у меня почему то это не работает ни в пределах листа, ни с другого листа. А вот 1) при этом действительно работает.

Для того чтобы это обойти надо создавать мастер-шейпы в виде группы, внутри группы фигуры будут иметь имена типа Sheet.ID .

Тоже можно в FAQ.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)