Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Имитация реакции на событие для автофигур - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Готовые решения » Имитация реакции на событие для автофигур (Программирующим в VBA)
Имитация реакции на событие для автофигур
VovaK Дата: Среда, 27.07.2011, 09:55 | Сообщение № 1
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
Каждая автофигура имеет замечательное свойство .OnAction, на которую можно посадить любой макрос, к примеру типа диспетчера действий - реакция на изменение позиции, цвета, размеров, да на любое доступное свойство.
Достаточно в модуле книги прописать:

[vba]
Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Shp As Shape
For Each Shp In ActiveSheet.Shapes
Shp.OnAction = "Start"
Next
End Sub
[/vba]

В модуле соорудить макрос с именем "Start", в котором расписать все реакции.
И ура все будет работать...
К сообщению приложен файл: Events_For_Shap.xls (44.0 Kb)


Всем удачи. У нас все получится.
С уважением, Владимир.


Сообщение отредактировал VovaK - Среда, 27.07.2011, 15:55
 
Ответить
СообщениеКаждая автофигура имеет замечательное свойство .OnAction, на которую можно посадить любой макрос, к примеру типа диспетчера действий - реакция на изменение позиции, цвета, размеров, да на любое доступное свойство.
Достаточно в модуле книги прописать:

[vba]
Код
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim Shp As Shape
For Each Shp In ActiveSheet.Shapes
Shp.OnAction = "Start"
Next
End Sub
[/vba]

В модуле соорудить макрос с именем "Start", в котором расписать все реакции.
И ура все будет работать...

Автор - VovaK
Дата добавления - 27.07.2011 в 09:55
VovaK Дата: Понедельник, 01.08.2011, 15:13 | Сообщение № 2
Группа: Друзья
Ранг: Форумчанин
Сообщений: 116
Репутация: 41 ±
Замечаний: 0% ±

10
На практике обратиться к Shape, который вызывает макрос оказалось не так просто, как думалось. Для реализации задуманного необходимо передавать в качестве аргумента имя этого самого Shape. Запись имени макроса в объявлении .OnAction при передаче параметра должна обязательно иметь апостроф в начале и в конце строки типа:

Shp.OnAction = "'Module1.Start(" & Chr(34) & Shp.Name & Chr(34) & ")'"

В прилагаемом файле левый клик выделяет фигуру, из которой вызван макрос.
К сообщению приложен файл: 5848409.xls (48.0 Kb)


Всем удачи. У нас все получится.
С уважением, Владимир.
 
Ответить
СообщениеНа практике обратиться к Shape, который вызывает макрос оказалось не так просто, как думалось. Для реализации задуманного необходимо передавать в качестве аргумента имя этого самого Shape. Запись имени макроса в объявлении .OnAction при передаче параметра должна обязательно иметь апостроф в начале и в конце строки типа:

Shp.OnAction = "'Module1.Start(" & Chr(34) & Shp.Name & Chr(34) & ")'"

В прилагаемом файле левый клик выделяет фигуру, из которой вызван макрос.

Автор - VovaK
Дата добавления - 01.08.2011 в 15:13
Формуляр Дата: Вторник, 16.08.2011, 10:56 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
VovaK,
чтобы обратиться к шейпу не нужно передавать его имя в аргументах - есть свойство Application.Caller
Тогда можно вешать макрос (как Sub) просто вручную.

Зато теперь понял, как вешать макрос с аргументами, что тоже бывает полезно.
Мерси.
К сообщению приложен файл: ShapeAction.xls (42.5 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеVovaK,
чтобы обратиться к шейпу не нужно передавать его имя в аргументах - есть свойство Application.Caller
Тогда можно вешать макрос (как Sub) просто вручную.

Зато теперь понял, как вешать макрос с аргументами, что тоже бывает полезно.
Мерси.

Автор - Формуляр
Дата добавления - 16.08.2011 в 10:56
Alex_ST Дата: Понедельник, 29.08.2011, 14:05 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Формуляр,
всё поначалу так здорово получалось при использовании Application.Caller …
А потом я ткнул мышкой в сгруппированный объект и сразу вылетел с ошибкой.
Стал разбираться почему и выяснил, что для сгруппированного рисунка Application.Caller возвращает какое-то абсолютно левое его имя, которого, естественно, нет на листе… Вот и вылетает.
Обидно.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 29.08.2011, 14:55
 
Ответить
СообщениеФормуляр,
всё поначалу так здорово получалось при использовании Application.Caller …
А потом я ткнул мышкой в сгруппированный объект и сразу вылетел с ошибкой.
Стал разбираться почему и выяснил, что для сгруппированного рисунка Application.Caller возвращает какое-то абсолютно левое его имя, которого, естественно, нет на листе… Вот и вылетает.
Обидно.

Автор - Alex_ST
Дата добавления - 29.08.2011 в 14:05
Формуляр Дата: Понедельник, 29.08.2011, 15:40 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Alex_ST,
Да, неожиданный получается эффект - Caller при клике на группу всё равно возвращает имя кликтнутого граф. объекта, входящего в группу.
Обратиться к нему напрямую не удаётся, приходится искать перебором.
Очень неудобно! angry
К сообщению приложен файл: 0421726.xls (46.5 Kb)


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеAlex_ST,
Да, неожиданный получается эффект - Caller при клике на группу всё равно возвращает имя кликтнутого граф. объекта, входящего в группу.
Обратиться к нему напрямую не удаётся, приходится искать перебором.
Очень неудобно! angry

Автор - Формуляр
Дата добавления - 29.08.2011 в 15:40
Alex_ST Дата: Понедельник, 29.08.2011, 16:46 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Да, согласен, не удобно. Поэтому всё-таки проще прямо в OnAction для каждого шэйпа прописывать его название как предложил Володя.
Хотя, конечно, как предлагали вы было бы намного удобнее:
- выбираешь курсором несколько шэупов
- по правой кнопке приписываешь на клик по ним один и тот же макрос прямо из списка макросов.
И не нужно было бы при смене листа перепрописывать ДЛЯ ВСЕХ шэйпов листа действия OnAction...
А идея-то изначально была в том, чтобы на схеме электрощита, нарисованной в Excel, подсвечивать при клике проводники...
К сообщению приложен файл: ___.xls (63.0 Kb)



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Понедельник, 29.08.2011, 16:47
 
Ответить
СообщениеДа, согласен, не удобно. Поэтому всё-таки проще прямо в OnAction для каждого шэйпа прописывать его название как предложил Володя.
Хотя, конечно, как предлагали вы было бы намного удобнее:
- выбираешь курсором несколько шэупов
- по правой кнопке приписываешь на клик по ним один и тот же макрос прямо из списка макросов.
И не нужно было бы при смене листа перепрописывать ДЛЯ ВСЕХ шэйпов листа действия OnAction...
А идея-то изначально была в том, чтобы на схеме электрощита, нарисованной в Excel, подсвечивать при клике проводники...

Автор - Alex_ST
Дата добавления - 29.08.2011 в 16:46
Формуляр Дата: Понедельник, 29.08.2011, 18:46 | Сообщение № 7
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Не понятно, к чему отказываться от простого решения из-за того, что оно применимо не всегда?
Для групп можно использовать Володин вариант, а для одиночных фигур - простой и удобный Caller.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеНе понятно, к чему отказываться от простого решения из-за того, что оно применимо не всегда?
Для групп можно использовать Володин вариант, а для одиночных фигур - простой и удобный Caller.

Автор - Формуляр
Дата добавления - 29.08.2011 в 18:46
Alex_ST Дата: Понедельник, 29.08.2011, 21:03 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну, я всё-таки предпочитаю использовать макросы пусть немного более сложные, но зато накладывающие как можно меньше ограничений на содержимое обрабатываемых файлов.
И я не хочу держать в уме, на какой странице можно группировать картинки, а на какой нельзя.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеНу, я всё-таки предпочитаю использовать макросы пусть немного более сложные, но зато накладывающие как можно меньше ограничений на содержимое обрабатываемых файлов.
И я не хочу держать в уме, на какой странице можно группировать картинки, а на какой нельзя.

Автор - Alex_ST
Дата добавления - 29.08.2011 в 21:03
Формуляр Дата: Понедельник, 29.08.2011, 21:45 | Сообщение № 9
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Если "немного более сложные",
то можно взять за основу мой вариант из поста №5. Он должен оба варианта обрабатывавть.
Только он расчитан на 1 уровень группировки. Если группы многоуровневые - придётся туда рекурсию забабахать.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Понедельник, 29.08.2011, 21:46
 
Ответить
СообщениеЕсли "немного более сложные",
то можно взять за основу мой вариант из поста №5. Он должен оба варианта обрабатывавть.
Только он расчитан на 1 уровень группировки. Если группы многоуровневые - придётся туда рекурсию забабахать.

Автор - Формуляр
Дата добавления - 29.08.2011 в 21:45
Alex_ST Дата: Понедельник, 29.08.2011, 22:01 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Так вот и получается, что метод Володи более универсален - работает с любым количеством уровней группировки и никаких рекурсий не нужно.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеТак вот и получается, что метод Володи более универсален - работает с любым количеством уровней группировки и никаких рекурсий не нужно.

Автор - Alex_ST
Дата добавления - 29.08.2011 в 22:01
Формуляр Дата: Понедельник, 29.08.2011, 22:30 | Сообщение № 11
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
С этим не поспоришь! Руками - оно завсегда универсальнее выходит. smile
Но есть ещё призрачная надежда, что более опытные коллеги надоумят, как напрямую обратиться по имени к фигуре, входящей в группу.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Понедельник, 29.08.2011, 23:22
 
Ответить
СообщениеС этим не поспоришь! Руками - оно завсегда универсальнее выходит. smile
Но есть ещё призрачная надежда, что более опытные коллеги надоумят, как напрямую обратиться по имени к фигуре, входящей в группу.

Автор - Формуляр
Дата добавления - 29.08.2011 в 22:30
Alex_ST Дата: Понедельник, 29.08.2011, 22:36 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
1. Я не пойму зачем вообще к ней (субфигуре сгруппированного рисунка) обращаться?
2. А разве макрос Володи прописывает макросы на фигуры не автоматически, а "руками"? biggrin
Вовсе нет! Просто текст OnAction для каждой фигуры получается свой, передаваемый в аргументах одному и тому же для всех макросу.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
Сообщение1. Я не пойму зачем вообще к ней (субфигуре сгруппированного рисунка) обращаться?
2. А разве макрос Володи прописывает макросы на фигуры не автоматически, а "руками"? biggrin
Вовсе нет! Просто текст OnAction для каждой фигуры получается свой, передаваемый в аргументах одному и тому же для всех макросу.

Автор - Alex_ST
Дата добавления - 29.08.2011 в 22:36
Формуляр Дата: Понедельник, 29.08.2011, 23:18 | Сообщение № 13
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Quote (Формуляр)
1. Я не пойму зачем вообще к ней (субфигуре сгруппированного рисунка) обращаться?

Так только в этом и весь затык: Caller даёт нам имя субфигуры, а получить по нему фигуру как объект мы не можем - ActiveSheet.Shapes(имя) субфигуры не находит. А если получить субфигуру, как объект, то дальше группу вытянуть - элементарно.


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Понедельник, 29.08.2011, 23:18
 
Ответить
Сообщение
Quote (Формуляр)
1. Я не пойму зачем вообще к ней (субфигуре сгруппированного рисунка) обращаться?

Так только в этом и весь затык: Caller даёт нам имя субфигуры, а получить по нему фигуру как объект мы не можем - ActiveSheet.Shapes(имя) субфигуры не находит. А если получить субфигуру, как объект, то дальше группу вытянуть - элементарно.

Автор - Формуляр
Дата добавления - 29.08.2011 в 23:18
Alex_ST Дата: Вторник, 30.08.2011, 10:10 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Я так понимаю, что интерес чисто теоретический...
Ну какой смысл получать субфигуру, а потом уже по ней вычислять имя фигуры когда можно сразу в аргументах приписанных по OnAction макросов задавать имя фигуры?
Единственный смысл, наверное, может быть в том, что тогда можно будет обойтись без цикла прописывания макросов при смене листа. А можно будет просто мышкой выделить необходимые рисунки и по ПКМ приписать к ним всем один и тот же макрос.
Ну, если у вас получится без сильного усложнения, то будет, конечно, удобнее и универсальнее.
Но в принципе можно обойтись и так как предложил Володя.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Вторник, 30.08.2011, 10:11
 
Ответить
СообщениеЯ так понимаю, что интерес чисто теоретический...
Ну какой смысл получать субфигуру, а потом уже по ней вычислять имя фигуры когда можно сразу в аргументах приписанных по OnAction макросов задавать имя фигуры?
Единственный смысл, наверное, может быть в том, что тогда можно будет обойтись без цикла прописывания макросов при смене листа. А можно будет просто мышкой выделить необходимые рисунки и по ПКМ приписать к ним всем один и тот же макрос.
Ну, если у вас получится без сильного усложнения, то будет, конечно, удобнее и универсальнее.
Но в принципе можно обойтись и так как предложил Володя.

Автор - Alex_ST
Дата добавления - 30.08.2011 в 10:10
PATRI0T Дата: Четверг, 28.09.2017, 20:01 | Сообщение № 15
Группа: Пользователи
Ранг: Участник
Сообщений: 57
Репутация: 4 ±
Замечаний: 0% ±

Excel 2013
Знаю, что сто лет ветке, но вдруг.

Я проблему со сгруппированными объектами решил проще - копируем наш объект, вставляем в какой-нибудь граф. редактор, вырезаем в нем белые области, если есть (чтоб прозрачность была), копируем и вставляем обратно в эксель. Получаем простой объект картинку. На него навешиваем что надо и не паримся
 
Ответить
СообщениеЗнаю, что сто лет ветке, но вдруг.

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

Автор - PATRI0T
Дата добавления - 28.09.2017 в 20:01
buchlotnik Дата: Воскресенье, 01.10.2017, 08:31 | Сообщение № 16
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
PATRI0T, а что вам мешает не париться и просто скопировать сгруппированный объект и тут же вставить его как картинку?


Сообщение отредактировал buchlotnik - Воскресенье, 01.10.2017, 09:21
 
Ответить
СообщениеPATRI0T, а что вам мешает не париться и просто скопировать сгруппированный объект и тут же вставить его как картинку?

Автор - buchlotnik
Дата добавления - 01.10.2017 в 08:31
Alex_ST Дата: Воскресенье, 01.10.2017, 10:17 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Ну это же уметь надо...
В 2003-ем, например, для этого нужно было после копирования перед вставкой нажать Shift тогда в меню "Вставить" появлялся пункт "Вставить рисунок..."
Правда, наверное, это можно сделать и через Спец. вставку, но ей, опять же, далеко не все умеют пользоваться.



С уважением,
Алексей
MS Excel 2003 - the best!!!


Сообщение отредактировал Alex_ST - Воскресенье, 01.10.2017, 10:18
 
Ответить
СообщениеНу это же уметь надо...
В 2003-ем, например, для этого нужно было после копирования перед вставкой нажать Shift тогда в меню "Вставить" появлялся пункт "Вставить рисунок..."
Правда, наверное, это можно сделать и через Спец. вставку, но ей, опять же, далеко не все умеют пользоваться.

Автор - Alex_ST
Дата добавления - 01.10.2017 в 10:17
buchlotnik Дата: Воскресенье, 01.10.2017, 12:44 | Сообщение № 18
Группа: Заблокированные
Ранг: Участник клуба
Сообщений: 3442
Репутация: 929 ±
Замечаний: 20% ±

2010, 2013, 2016 RUS / ENG
Alex_ST, дело в том, что PATRI0T заявил версию 2013 - и в ней проблем точно нет (скрин с 2016, но разницы в этом аспекте нет - доступно по ПКМ) :
К сообщению приложен файл: 1572540.jpg (26.6 Kb)


Сообщение отредактировал buchlotnik - Воскресенье, 01.10.2017, 12:46
 
Ответить
СообщениеAlex_ST, дело в том, что PATRI0T заявил версию 2013 - и в ней проблем точно нет (скрин с 2016, но разницы в этом аспекте нет - доступно по ПКМ) :

Автор - buchlotnik
Дата добавления - 01.10.2017 в 12:44
Мир MS Excel » Вопросы и решения » Готовые решения » Имитация реакции на событие для автофигур (Программирующим в VBA)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!