Author |
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". И все. |
|
|
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 ассоциируется с текстовым полем первого селектированного шейпа в активном окне. Естественно, это только одна из возможностей - шейп можно выбрать и любым другим способом. Текст сворачивается в точку (если его там не было). Если был, то можно указать, какая именно часть заменяется. Вписывается собственно формула - ссылка на ячейку страницы. |
|
|
krys
55 Posts |
Posted - 10/08/2006 : 15:27:08
|
понятно. Такой вопрос в догонку:) : Я создаю в Секции Scratch на позиции 1 новую строку. И вижу что адрес ячейки в формуле меняется на Scratch.А2( старая строка сместилась на позицию 2). Если возможнть сохранить текст формулы неизменным,так что бы формула всегда ссылалась на ячейку первой строки ? (Сейчас я программно обновляю техт Формулы после того как создаю новую строку) |
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/08/2006 : 15:49:31
|
А зачем это нужно, если не секрет? Может удастся достичь нужного результата более естественным путем? |
|
|
krys
55 Posts |
Posted - 10/08/2006 : 17:13:52
|
в Ячейках Scratch.Ах, Scratch.Bх и т.д. сохраняется определенная информация. Содержимое первых 5 строк(хронологически -это строки которые были занесены последними) отображаются в таблице на чертеже.
Таблица собрана из шейпов так что текст шейпа отображает содержимое соответствующей ячейки страницы. ---------------------- |---|-----|----|-----| |---|-----|----|-----|
Порядок внесения строк в секцию Scratch был определен предположением что техт ранее оговоренной формулы остается неизменным, и таким образом таблица на чертеже будет обновлятся автоматически.
P.S. как мне сейчас видится, формула содержит ссылку на определенный ячейка-обьект , а не на позицицию ячейки из которой должно извлекаться содержимое, верно ли мое предположение? я нигде не нашел четкого высказывания по этому поводу. P.P.S. надеюсь формулировка понятна... |
|
|
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. Но это все слишком сложно, значит плохо... |
|
|
|
Topic |
|
|
|