|
Модераторы: mihanik |
|
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Интересует запуск макроса из функции vba в Excel.
Макрос может использовать функции. А если наоборот - функция должна запустить макрос? Если в ячейке А1 имеется некая функция vba, выполняющая например сложение значений двух соседних ячеек (или еще какие то вычисления), и существует Макрос1 который просто печатает в ячейке А10 слово "Привет", при условии что результат вычислений суммы двух ячеек в функции будет равен 10, но если сумма будет равна 100, то будет запускаться какой то иной МакросХ, который например изменит серый цвет заливки в 100 строке на красный. Не важно что будет считать функция, и какую работу будет выполнять макрос, главное чтобы при каждом пересчете листа и книги и соответственно при пересчете результатов данной функции каждый раз запускался нужный макрос, зависящий от результата вычислений функции. И для этого не нужно будет отдельно вызывать макрос из меню, или каждый раз клацать кнопку на листе, и вообще без каких либо кнопок, т.е. все должно работать в автоматическом режиме. Такое возможно? |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20577 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Описанное - невозможно. Функция (а равно и вызываемые из неё функции и процедуры) не имеет право изменения содержимого листа или иного взаимодействия с визуальны интерфейсом.. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Жаль что Описанное - невозможно, остается лишь обходной путь таймер - но так делать конечно не супер.
Akina, благодарю за ответ! |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20577 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Я, признаться, не понимаю смысла в том, чтобы делать всё это кодом. Для решения именно описанной задачи достаточно формулы и условного форматирования. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Для решения именно описанной задачи достаточно формулы и условного форматирования - но это всего лишь схема действия что может произойти из того что мы ожидаем:
Например, в какой то ячейке (A1) имеется значение ( =ТДАТА() ), в другой ячейке этакая функция ( =tadam(A1) ) берущая входным аргументом значение из первой ячейки. Функция сверяет аргумент с своими критериями и выбирает какой из макросов запустить, или не запускать ничего, и так происходит всякий раз когда в ЛЮБОЙ из ячеек книги меняется значение. Так в первой ячейке значение вторник, ну а если будет пятница и время под конец рабочего дня, то нужный макрос включит нам Мендельсона. Можно это же самое проверять по таймеру, но таймер будет работать постоянно что не есть хорошо. Возможное применение: Вы много поработали с данным файлом и он очень сложный (или содержит практические точные данные), передаете его кому то другому и хотите подстраховать(ся) от поломки (защита от дурака), в этом случае и пригодится контролирующий макрос, что то типа "контрольной суммы". Разница макроса и функции - функция это всего лишь функция, и ничего то она не делает кроме как возвращает значение. В том и состоит смысл задачи: заставить работать функцию не слабее макроса, причем не задействуя Workbook_SheetCalculate, Workbook_SheetChange и др. Это сообщение отредактировал(а) YahоО - 24.12.2024, 21:38 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20577 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Во-первых, есть защита ячеек. Если дураку дать доступ только туда, где он ничего не испортит, то он ничего и не испортит. А если он пробьёт такую защиту, то это не дурак, а диверсант либо саботажник, и там совсем другие расклады. Во-вторых, защищаться от дурака надо в момент, когда он всё испортит - а это событие Workbook_BeforeSave. Именно в этом методе нужно проверить, что дурак ничего не поломал, а если поломал, то либо откатить, либо запретить сохранение, либо потребовать сохранение с новым именем (если ему так хочется, пусть портит копию, но не трогает оригинал). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
надо в момент, когда он всё испортит - а это событие Workbook_BeforeSave - ну нет конечно, потому что до этого ОН может что то посчитать, получить результат, скопировать и сохранить в других файлах. В таком случае BeforeSave практически бесполезно.
Но все же есть и иной вариант применения)) Пример навскидку, и может быть не совсем удачным, файл должен работать до какого либо времени (что то типа лицензии), потом он скукоживается (шифруется, или обрезается до неупотребимого вида), но может быть восстановлен в рабочее состояние путем предъявления ключа-восстановителя. Ключ может быть проверен запросом на сайт, и уже его ответ позволит макросу все восстанавливать. Других примеров пока нет, но заставить работать функцию не слабее макроса все же до сих пор любопытно. |
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Akina Вы опираетесь на отсутствие такой встроенной фишки Excel, и потому уверенно можете опровергать все мои направления и примеры. А если бы наоборот, Вы хотели бы "пробить" стену невозможности и сами захотели поиметь эффект использования функции с возможностями макроса, то какой бы Вы привели пример практического использования? |
|||
|
||||
Akina |
|
||||
Советчик Профиль Группа: Модератор Сообщений: 20577 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Ну так это его ответственность, не твоя. Инструкция по использованию есть? если нет - напиши и вставь в файл первым листом. Я бы использовал не функцию листа, а соответствующий модуль. Это не я же ввёл такое странное ограничение:
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 206 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Вы как всегда правы, без события невозможно запустить макрос.
А заставить работать функцию не слабее макроса ... )))) Akina Вы так терпеливы в объяснении того что должно быть очевидным Это сообщение отредактировал(а) YahоО - 26.12.2024, 21:27 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20577 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
... невозможно из-за наличия у функции дополнительных ограничений по сравнению с макросом. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Правила форума "Программирование, связанное с MS Office" | |
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |