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

Форум по вопросам применения и программирования в Visio
Текущее время: 29 мар 2024, 03:46

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


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


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

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 11:48 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Добрый день, форумчане!

Имеется документ Visio, допустим в нем есть Лист1 и Лист2. На Лист1 имеется две кнопки OptionButton, которые выполняют определенные скрипты, которые в итоге либо скрывают либо отображают (путем установки прозрачности) интегрированные на Лист2 картинки (растровые). Так вот по какой-то причине, часть этих самых картинок на Листе2 после программного изменения их прозрачности на 100% не становятся невидимыми на Листа2, чтобы это произошло нужно произвести какое-то действие (например подвинуть их, или с листом что-то сделать), т.е. фактически сделать что-то, чтобы Лист2 обновился. Нашел на просторах сети сочетание клавиш для Visio Ctrl+Alt+G, которое я не знаю что именно делает, но после нажатия лист обновляется и картинки становятся прозрачными.

Так вот имеется два вопроса:
1. Почему картинки могут себя так вести (особенно это интересно на фоне того, что не все они себя так ведут)
2. Как можно в VBA скрипте, который выполняется в секции OptionButton, вызываемой с Лист1, отправить команду SendKeys "^%(g)" так, чтобы она выполнилась для Лист2

Заранее благодарю за любые подсказки!


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 15:03 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 15:21 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
первое, что пришло на ум - программно выделить все шейпы на том листе и сдвинуть вперед и назад. Ну либо сгруппировать/разгруппировать :)

Мне тоже это пришло первое в голову ))) После изменения прозрачности программно менял угол наклона группы на 1 градус и назад. Не проканало, угол меняется, но все остается по прежнему. Потом тоже самое сделал со смещением объектов, тоже нулевой результат.
Потом нашел сочетание клавиш, но как реализовать чет не знаю.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 15:52 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Сдается мне, что сочетания клавиш действуют в окне. То есть на другом (перекрытом) листе с их помощью ничего сделать нельзя. Может и ошибаюсь, конечно...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 16:09 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
Сдается мне, что сочетания клавиш действуют в окне. То есть на другом (перекрытом) листе с их помощью ничего сделать нельзя. Может и ошибаюсь, конечно...

Находил забугорный форум, где собственно и отрыл эту комбинацию. Там точно такая же проблема была у человека. Ему посоветовали эту комбинацию. Так он тоже столкнулся с тем же с чем и я: при выполнении SendKeys функция действовала на окно VBA, а не на лист. Ему дали ссылку на файл с рабочим скриптом и он радовался, что все сработало. А ссылка уже давно битая, да и тема супер тухлая (с пяток лет).
Задал вопрос тут, может кто-то такое делал.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 16:34 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
а файлик можно приложить?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 28 апр 2017, 20:33 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
lite.fun писал(а):
Находил забугорный форум
ну тогда до кучи ссылку на эту тему !
Дополнено позднее: про SendKeys я поднимал здесь тему, в обсуждении упоминались два нюанса:
1. необходимость добавлять задержку, чтобы успело произойти переключение между приложениями.
Robink в сообщении #4679 писал(а):
Только пришлось вставить паузу.
или в твоем случае возможно не успевает произойти переключение между страницами или окнами.
2. происходит "произвольное" переключение раскладки клавиатуры
Robink в сообщении #4688 писал(а):
Смотри, что происходит со сменой языка. У меня постоянно переключается на русский. Приходится переключать обратно.

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 01 май 2017, 01:53 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Как мы решали аналогичную проблему, когда что-то не перерисовывалось нормально

Dim a As Double, b As Double, c As Double, d As Double
ActiveWindow.GetViewRect a, b, c, d
ActiveWindow.SetViewRect a, b, c, d + 0.01
ActiveWindow.SetViewRect a, b, c, d

Отсюда
http://visguy.com/vgforum/index.php?top ... 9#msg10179

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выполнить SendKeys для конкретного листа
СообщениеДобавлено: 02 май 2017, 11:52 
Не в сети
Новичок

Зарегистрирован: 07 апр 2017, 10:18
Сообщений: 32
Использую Visio c: 2013
Отрасль: АСУТП
Уровнь квалификации: Чуть выше среднего
Очков репутации: 0

Добавить очки репутацииУменьшить очки репутации
Добрый день!

Всем огромное спасибо за советы!

Surrogate, я находил тему ссылку на которую Вы дали. Пробовал выставлял паузу, безрезультатно.

nbelyh, этот метод я также нашел и опробовал, тоже не помогло.

Но нет худо без добра ))) У меня растровые картинки которые я делаю прозрачными/непрозрачными на Лист2 были собраны в группу, из которой я сделал мастер-шейп. Так вот внутри этого мастер шейпа, в User-Define группы у меня было две ячейки, которые использовались в логике скрытия отображения той или иной картинки. Одну из этих ячеек я сразу прям в мастер-шейпе привязал к другой ячейке, которая находится в шейп-лиcте документа. А привязал сразу т.к. в ней ссылка всегда одна и та же, не зависимо от того сколько у меня копий, созданных из мастер-шейпа. А вот вторую ячейку я перепривязывал в каждом созданном шейпе из мастер-шейпа, т.к. там ссылка была каждый раз разная.
Итак от полной безисходности решил я пересобрать снова этот свой мастер-шейп, и решил я первую ячейку привязывать не в мастер-шейпе, а в каждом созданном экземпляре, не смотря на то, что ссылка каждый раз одна и та же. И о чудо, все заработало как надо! Стал разбираться и похоже при привязке этой ячейки в мастер-шейпе, ее значение не совсем корректно обрабатывалось в визио, ну или не всегда корректно обновлялось. От этого и были свистопляски с некорректным скрытием/отображением. Не знаю, может это конечно общеизвестный факт, но для меня это было сюрпризом )))

Так что, наверное, тему можно считать закрытой, не смотря на то, что сабж собственно не раскрыт.


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

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



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

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


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

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