Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 16 июн 2019, 07:29

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Дроп мастер-шейпа
СообщениеДобавлено: 28 май 2019, 14:25 
Не в сети
Постоянный участник

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 50
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Уважаемые форумчане.
Подскажите, пожалуйста, что нужно прописать в EventDrop мастер-шейпа, чтобы при его дропе на страницу в ShapeSheet этой самой страницы:
1. добавился раздел Actions
2. в Action.Row_1 записалось некоторое "XYZ"

Заранее спасибо


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Дроп мастер-шейпа
СообщениеДобавлено: 28 май 2019, 14:47 
Не в сети
Administrator

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 3607
Откуда: оттуда
Использую Visio c: 1998
Отрасль: -
Должность: Information worker
Уровнь квалификации: ShapeSheet, VBA
is308 писал(а):
1. добавился раздел Actions
2. в Action.Row_1 записалось некоторое "XYZ"
формула такая

Events

EventDrop

SETF(GetRef(ThePage!Actions.Row_1.Action),"Docmd(1312)")+SETF(GetRef(ThePage!Actions.Row_1),"XYZ")

 

самое главное, чтобы в мастере на странице была секция Actions и строка Actions.Row_1 !


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Дроп мастер-шейпа
СообщениеДобавлено: 28 май 2019, 15:38 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1421
Очков репутации: 100594

Добавить очки репутацииУменьшить очки репутации
То есть предполагается, что секция и строка будут скопированы (унаследованы) из мастер-шейпа, а значение XYZ прописано формулой.
НО!
Возникает вопрос - насколько надежны такие действия? Легко представить десяток причин, которые могут помешать наступлению предполагаемого результата. Вот и будет это работать "почти всегда".
Лично я в подобной ситуации, нисколько не сомневаясь, написал бы макрос. И вызвал бы его в EventDrop.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Дроп мастер-шейпа
СообщениеДобавлено: 30 май 2019, 10:14 
Не в сети
Постоянный участник

Зарегистрирован: 24 авг 2016, 22:21
Сообщений: 50
Использую Visio c: 2013
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Лично я в подобной ситуации, нисколько не сомневаясь, написал бы макрос. И вызвал бы его в EventDrop.


Вас не затруднит накидать подобный макрос или выложить готовый vss с мастер-шейпом? Никогда не доводилось сталкиваться с макросами для мастер-шейпов.
Заранее спасибо


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Дроп мастер-шейпа
СообщениеДобавлено: 30 май 2019, 11:54 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1421
Очков репутации: 100594

Добавить очки репутацииУменьшить очки репутации
Цитата:
Никогда не доводилось сталкиваться с макросами для мастер-шейпов.

Не совсем точная формулировка...
Макрос сажается в трафарет. А вызывается при дропе мастер-шейпа из этого трафарета на страницу документа.
В качестве примера такого трафарета можно взять Sorting.vss
Там много всего, но нас интересует только одна процедура StartForm
В трафарете имеется единственный шейп, при дропе которого открывается форма. В шейпе прописано EventDrop=CALLTHIS("mSort.StartForm","Sorting")
то есть вызывается как раз эта процедура.
Естественно, для добавления секции на страницу процедуру нужно будет заменить. Например, на такую
Код:
Sub ttt()
    Dim pg As Visio.Page
    Set pg = ActivePage
    pg.PageSheet.AddSection visSectionAction
    pg.PageSheet.AddRow visSectionAction, visRowLast, visTagDefault
    pg.PageSheet.CellsSRC(visSectionAction, 0, visActionMenu).FormulaU = Chr(34) & "NewAction" & Chr(34)
    pg.PageSheet.CellsSRC(visSectionAction, 0, visActionAction).FormulaU = "DoCmd(1312)"
End Sub

Это опять же только пример. Полезно будет добавить проверку того, что секция уже существует (иначе будет ошибка), проверку количества строк в секции и т.д. Короче, включить все необходимые проверки, чтобы операция выполнялась надежно или хотя бы сообщалось об ошибках.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Дроп мастер-шейпа
СообщениеДобавлено: 30 май 2019, 11:59 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1421
Очков репутации: 100594

Добавить очки репутацииУменьшить очки репутации
Фокус не удался :)
Выложил защищенный вариант. Для просмотра кода лучше использовать вот этот. Он без пароля.


Вложения:
Sorting.vss [30 Кб]
Скачиваний: 2
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB