Форум пользователей Visio
http://visio.getbb.ru/

Выполнить SendKeys для конкретного листа
http://visio.getbb.ru/viewtopic.php?f=6&t=1120
Страница 1 из 1

Автор:  lite.fun [ 28 апр 2017, 11:48 ]
Заголовок сообщения:  Выполнить SendKeys для конкретного листа

Добрый день, форумчане!

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

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

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

Автор:  9rey [ 28 апр 2017, 15:03 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

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

Автор:  lite.fun [ 28 апр 2017, 15:21 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

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

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

Автор:  Tumanov [ 28 апр 2017, 15:52 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

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

Автор:  lite.fun [ 28 апр 2017, 16:09 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

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

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

Автор:  9rey [ 28 апр 2017, 16:34 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

а файлик можно приложить?

Автор:  Surrogate [ 28 апр 2017, 20:33 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

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

Автор:  nbelyh [ 01 май 2017, 01:53 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

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

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

Автор:  lite.fun [ 02 май 2017, 11:52 ]
Заголовок сообщения:  Re: Выполнить SendKeys для конкретного листа

Добрый день!

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

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

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

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

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/