All Forums
 Категория Visio
 Форум Вопросы и ответы
 Проверка свойст TheDoc и задание значений по умолч
Author Previous Topic Topic Next Topic  

repa

5 Posts

Posted - 02/16/2006 :  20:46:46
Создал шейп который ссылается на TheDoc!User.Row_1.
При вытаскивании его на документ у меня добавляется пользовательская переменная документа User.Row_1. Добавляется со значением 0

Вопрос как мне выполнить проверку значения User.Row_1 документа при вытаскивании шейпа и в случае если он до етого не существовал или равен 0 записать в него какое либо текстовое значение.

P.S. Пока только допер до того как изменить значение User.Row_1 документа при вытаскивании шейпа через EventDrop.

=IF(TheDoc!User.Row_1,SETF(GetRef(TheDoc!User.Row_1),"""цирк"""),SETF(GetRef(TheDoc!User.Row_1),"""цирк1"""))

А вот как сделать анализ значения ума не приложу.

Tumanov

Russia
1198 Posts

Posted - 02/17/2006 :  07:50:57
Насколько я понимаю, элементарный анализ, для Вас не проблема (просто в условии вместо
IF(TheDoc!User.Row_1,...
будет что-то типа
IF(TheDoc!User.Row_1=0,...
или IF(StrSame(TheDoc!User.Row_1,"цирк")...
Сложности возникают скорее всего потому, что условие становится более сложным. Возможные состояния:
1. True
2. False
3. Error (причем ошибки могут быть разного типа)
4. Поведение Visio в случае ошибок
Поясню два последних пункта.
В случае ошибки (например, ячейка содержит строку вместо ожидаемого числа) формула кажется просто не выполняется. То есть Вы не выполните действия ни по True, ни по False - вообще ничего не выполните.
Но в некоторых случаях, как в данном, при отсутствии ячейки User.Row_1 Visio "поможет" Вам ее сформировать. Чем несколько затруднит анализ ошибки :)
Короче, на общий случай тут замучаешься формулу писать. Надо до упора конкретизировать - что именно нужно, упрощать, а потом уже реализовать конкретный частный случай.
Go to Top of Page

repa

5 Posts

Posted - 02/17/2006 :  11:12:43
Задача стоит следующим образом
Я создаю чистый документ из нескольких листов. На каждый листы выкидываю создаваемый шэйп. Если я в одном меняю значение текстового поля, то во всех остальных оно тоже меняется.

Решение с использованием StrSame(TheDoc!User.Row_1,"цирк") оказалось тем, что доктор прописал. Теперь Event Drop выглядит следующим образом.
=IF(STRSAME(TheDoc!User.Row_1,"0"),SETF(GetRef(TheDoc!User.Row_1),"""цирк"""),FALSE)

Tumanov, вам большей сенкс.

З.Ы.Есть ли какой способ проанализировать тип значения хранящийся в ячейке?

Как сослаться на переменную в которой хранится текст, что я набираю в каком либо шэйпе?
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/17/2006 :  21:55:22
Хорошего способа проанализировать тип не знаю. Visio старается по максимуму все сам конвертировать...
А вот когда конвертировать уже нельзя, то можно отловить некоторые ошибки. Нужно смотреть функции ISERRVALUE, ISERR, ISERRNA, ISERROR.

Текст выбирается специальной функцией ShapeText, например
=ShapeText(Sheet.1!TheText)
Вторым аргументом его еще и подформатировать можно. Подробности см. в хелпе.
Go to Top of Page

repa

5 Posts

Posted - 02/26/2006 :  15:33:31
Огромное спасибо
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)