All Forums
 Категория Visio
 Форум Вопросы и ответы
 Вопрос по SectionTextField
Author Previous Topic Topic Next Topic  

krys

55 Posts

Posted - 10/06/2006 :  16:30:39
Привет, у меня такая задача:

имеется шейп, техт которого автоматически должен меняться в Завосимости от содержимого ячейки "ThePage!SchratchA"

Для етих целей я в

ShapeSheet записываю выже указаную формулу.
(Visio::visSectionTextField,Visio::visRowField ,Visio::visFieldCell)

Если значение Ячейки Scratch обновляется, ето отображется и в TextField в ShapeSheet моей Фигуры.
Но техт Шейпа не меняется.
Я заметил, что формула также занесена в Поле: формулы пользователя, но работать она начинает только когда я формулу выбираю и затем жму на ОК.

Тогда техт тоже виден.
Как воспроизвести ето действие программно?


Dart

11 Posts

Posted - 10/06/2006 :  23:33:21
Чтобы автоматически изменить текст шейпа, в зависимости от другой ячейки просто выбери шейп и в главном меню выбери Insert > Field (Втавить > Поле), дальше в окошке Category выбираешь Custom Formula, и в появившемя снизу текстовом поле напиши "=ThePage!Scratch.A1". И все.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/07/2006 :  10:22:33
Немного дополню...
В Visio 2003 есть возможность записи макросов. Если включить запись и выполнить то, что советует Dart, то в документе появится новый модуль с макросом. Посмотрев его текст, можно понять, как данное действие выполняется программно.
Такие макросы часто содержат дополнительные не очень нужные строки... Если их отбросить, то останется только суть.
Вот что получается в данном случае:
Dim vsoCharacters As Visio.Characters
Set vsoCharacters = Application.ActiveWindow.Selection.Item(1).Characters
vsoCharacters.Begin = 0
vsoCharacters.End = 0
vsoCharacters.AddCustomFieldU "ThePage!Scratch.A1", visFmtNumGenNoUnits

Комментирую:
Записать формулу в текстовое поле шейпа можно с помощью объекта Characters. Объявляется такой объект vsoCharacters.
Объект vsoCharacters ассоциируется с текстовым полем первого селектированного шейпа в активном окне. Естественно, это только одна из возможностей - шейп можно выбрать и любым другим способом.
Текст сворачивается в точку (если его там не было). Если был, то можно указать, какая именно часть заменяется.
Вписывается собственно формула - ссылка на ячейку страницы.
Go to Top of Page

krys

55 Posts

Posted - 10/08/2006 :  15:27:08
понятно.
Такой вопрос в догонку:) :
Я создаю в Секции Scratch на позиции 1 новую строку.
И вижу что адрес ячейки в формуле меняется на Scratch.А2( старая строка сместилась на позицию 2).
Если возможнть сохранить текст формулы неизменным,так что бы формула всегда ссылалась на ячейку первой строки ?
(Сейчас я программно обновляю техт Формулы после того как создаю новую строку)
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/08/2006 :  15:49:31
А зачем это нужно, если не секрет?
Может удастся достичь нужного результата более естественным путем?
Go to Top of Page

krys

55 Posts

Posted - 10/08/2006 :  17:13:52
в Ячейках Scratch.Ах, Scratch.Bх и т.д. сохраняется определенная информация.
Содержимое первых 5 строк(хронологически -это строки которые были занесены последними) отображаются в таблице на чертеже.

Таблица собрана из шейпов так что текст шейпа отображает содержимое соответствующей ячейки страницы.
----------------------
|---|-----|----|-----|
|---|-----|----|-----|

Порядок внесения строк в секцию Scratch был определен предположением что техт ранее оговоренной формулы остается неизменным, и таким образом таблица на чертеже будет обновлятся автоматически.

P.S.
как мне сейчас видится, формула содержит ссылку на определенный ячейка-обьект , а не на позицицию ячейки из которой должно извлекаться содержимое, верно ли мое предположение? я нигде не нашел четкого высказывания по этому поводу.

P.P.S.
надеюсь формулировка понятна...
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/08/2006 :  19:23:13
quote:
как мне сейчас видится, формула содержит ссылку на определенный ячейка-обьект , а не на позицицию ячейки из которой должно извлекаться содержимое, верно ли мое предположение? я нигде не нашел четкого высказывания по этому поводу

Четкого высказывания я тоже не видел, но опыты приводят к такому выводу. Ссылки пересчитываются. Если в процессе пересчета обнаруживается ошибка, то вместо ссылки или формулы может вообще константа появиться.
Visio помогает пользователю отслеживать ссылки :) Собственно, если думать так же, как Visio, то такая помощь нисколько не мешает.
Так что в Вашем случае наверное проще будет изменить процесс добавления строк Scratch...
В качестве извращения можно попробовать действовать через SETF - GetRef. Например, вот такая формула, размещенная в какой-либо ячейке, должна подправлять ссылку в текстовом поле
=SETF(GetRef(Fields.Value);"ThePage!Scratch.A1")
Но ее еще надо вовремя запустить. Можно привязать к какому-либо событию. Например, при вот такой формуле
=SETF(GetRef(Fields.Value);"ThePage!Scratch.A1")+DEPENDSON(PinX)
поведение будет следующим:
- добавляется строка в Scratch - в шейпе остается старое значение;
- слегка сдвигаем шейп - в шейпе появляется текст, соответствующий новой Scratch.A1.
Но это все слишком сложно, значит плохо...
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)