Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Макрос и функция, запуск макроса из функции 
:(
    Опции темы
YahоО
Дата 27.11.2024, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Интересует запуск макроса из функции vba в Excel.


Макрос может использовать функции. А если наоборот - функция должна запустить макрос?

Если в ячейке А1 имеется  некая функция vba,  выполняющая например сложение значений двух соседних ячеек (или еще какие то вычисления),
и существует Макрос1 который просто печатает в ячейке А10 слово "Привет", при условии что результат вычислений суммы двух ячеек в функции будет равен 10,
но если сумма будет равна 100, то будет запускаться какой то иной МакросХ, который например изменит серый цвет заливки в 100 строке на красный.

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



PM MAIL   Вверх
Akina
Дата 30.11.2024, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20577
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(YahоО @  27.11.2024,  19:47 Найти цитируемый пост)
Такое возможно?

Описанное - невозможно. Функция (а равно и вызываемые из неё функции и процедуры) не имеет право изменения содержимого листа или иного взаимодействия с визуальны интерфейсом..


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
YahоО
Дата 2.12.2024, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Жаль что Описанное - невозможно, остается лишь обходной путь таймер - но так делать конечно не супер.
Akina, благодарю за ответ!


PM MAIL   Вверх
Akina
Дата 3.12.2024, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20577
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(YahоО @  27.11.2024,  19:47 Найти цитируемый пост)
Если в ячейке А1 имеется  некая функция vba,  выполняющая например сложение значений двух соседних ячеек (или еще какие то вычисления),
и существует Макрос1 который просто печатает в ячейке А10 слово "Привет", при условии что результат вычислений суммы двух ячеек в функции будет равен 10,
но если сумма будет равна 100, то будет запускаться какой то иной МакросХ, который например изменит серый цвет заливки в 100 строке на красный.

Я, признаться, не понимаю смысла в том, чтобы делать всё это кодом. Для решения именно описанной задачи достаточно формулы и условного форматирования.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
YahоО
Дата 24.12.2024, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Для решения именно описанной задачи достаточно формулы и условного форматирования - но это всего лишь схема действия что может произойти из того что мы ожидаем:

Например, в какой то ячейке (A1)  имеется значение  ( =ТДАТА()  ), в другой ячейке этакая функция ( =tadam(A1) )  берущая входным аргументом значение из первой ячейки.
Функция сверяет аргумент с своими критериями и выбирает какой из макросов запустить, или не запускать ничего, и так происходит всякий раз когда в ЛЮБОЙ из ячеек книги меняется значение.
Так в первой ячейке значение вторник, ну а если будет пятница и время под конец рабочего дня, то нужный макрос включит нам Мендельсона.

Можно это же самое проверять по таймеру, но таймер будет работать постоянно что не есть хорошо.
Возможное применение: Вы много поработали с данным файлом и он очень сложный (или содержит практические точные данные), передаете его кому то другому и хотите подстраховать(ся) от поломки (защита от дурака), в этом случае и пригодится контролирующий макрос, что то типа "контрольной суммы".
Разница макроса и функции - функция это всего лишь функция, и ничего то она не делает кроме как возвращает значение. В том и состоит смысл задачи: заставить работать функцию не слабее макроса, причем не задействуя Workbook_SheetCalculate, Workbook_SheetChange и др.


Это сообщение отредактировал(а) YahоО - 24.12.2024, 21:38
PM MAIL   Вверх
Akina
Дата 25.12.2024, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20577
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(YahоО @  24.12.2024,  22:17 Найти цитируемый пост)
передаете его кому то другому и хотите подстраховать(ся) от поломки (защита от дурака)

Во-первых, есть защита ячеек. Если дураку дать доступ только туда, где он ничего не испортит, то он ничего и не испортит. А если он пробьёт такую защиту, то это не дурак, а диверсант либо саботажник, и там совсем другие расклады.
Во-вторых, защищаться от дурака надо в момент, когда он всё испортит - а это событие Workbook_BeforeSave. Именно в этом методе нужно проверить, что дурак ничего не поломал, а если поломал, то либо откатить, либо запретить сохранение, либо потребовать сохранение с новым именем (если ему так хочется, пусть портит копию, но не трогает оригинал).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
YahоО
Дата 25.12.2024, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



надо в момент, когда он всё испортит - а это событие Workbook_BeforeSave  - ну нет конечно, потому что до этого ОН может что то посчитать, получить результат, скопировать и сохранить в других файлах. В таком случае BeforeSave практически бесполезно.

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

PM MAIL   Вверх
YahоО
Дата 25.12.2024, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 11.6.2015

Репутация: нет
Всего: 1




Akina Вы опираетесь на отсутствие такой встроенной фишки Excel, и потому уверенно можете опровергать все мои направления и примеры. А если бы наоборот, Вы хотели бы "пробить" стену невозможности и сами захотели поиметь эффект использования функции с возможностями макроса, то какой бы Вы привели пример практического использования?
PM MAIL   Вверх
Akina
Дата 26.12.2024, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20577
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(YahоО @  25.12.2024,  17:28 Найти цитируемый пост)
до этого ОН может что то посчитать, получить результат, скопировать и сохранить в других файлах

Ну так это его ответственность, не твоя. Инструкция по использованию есть? если нет - напиши и вставь в файл первым листом. 

Цитата(YahоО @  25.12.2024,  23:14 Найти цитируемый пост)
А если бы наоборот, Вы хотели бы "пробить" стену невозможности и сами захотели поиметь эффект использования функции с возможностями макроса, то какой бы Вы привели пример практического использования?

Я бы использовал не функцию листа, а соответствующий модуль. Это не я же ввёл такое странное ограничение:
Цитата(YahоО @  24.12.2024,  22:17 Найти цитируемый пост)
В том и состоит смысл задачи: заставить работать функцию не слабее макроса, причем не задействуя Workbook_SheetCalculate, Workbook_SheetChange и др.





--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
YahоО
Дата 26.12.2024, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 11.6.2015

Репутация: нет
Всего: 1



Вы как всегда правы, без события невозможно запустить макрос.

А заставить работать функцию не слабее макроса ... ))))


Akina Вы так терпеливы в объяснении того что должно быть очевидным smile

Это сообщение отредактировал(а) YahоО - 26.12.2024, 21:27
PM MAIL   Вверх
Akina
Дата 27.12.2024, 07:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20577
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(YahоО @  26.12.2024,  22:10 Найти цитируемый пост)
А заставить работать функцию не слабее макроса

... невозможно из-за наличия у функции дополнительных ограничений по сравнению с макросом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0914 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.