Как сделать чтобы макрос запускался автоматически

Обновлено: 03.07.2024

Кто-нибудь!
Пожалуйста подскажите новичку в такой проблеме:
Есть екселевский документ (Exel 2003). Есть макрос, который вносит в содержимое документа некоторые изменения.
Как сделать так, чтобы этот макрос выполнялся автоматически по событиям: открытие документа, активация нужной страницы?
Т.е. иначе говоря, например, выполнялся сам автоматически сразу при открытии документа.
Нигде не могу это найти.
Спасибо большое заранее!!

p.s. [FONT="Comic Sans MS"]Для других событий додумкаю по аналогии. [/FONT]

Сервис\Макрос\редактор VBA
дальше щелчек по ЭтаКнига
или Лист
В открывшемся редакторе Workbook или Worksheet
рядом справа куча встроеных макросов: двойной щелчек, выбор и т.д

Как сделать так, чтобы этот макрос выполнялся автоматически по событиям: . активация нужной страницы?


В модуле кода интересующего Вас рабочего листа разместить макрос с заголовком:
[color=blue]Private Sub Worksheet_Activate()[/color]

Cпасибо большое .
точно работает :)

У меня теперь только один вопрос. Когда я пытался найти это в хелпаке,то наткнулся на такой примерчик в ивентах

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)

который того же результата, что и Workbook_Open (), не дал.
Просветите пожалуйста почему? И что я вообще такое нашел?

Cпасибо большое .
точно работает :)

У меня теперь только один вопрос. Когда я пытался найти это в хелпаке,то наткнулся на такой примерчик в ивентах

Private Sub App_WorkbookOpen(ByVal Wb As Workbook)

который того же результата, что и Workbook_Open (), не дал.
Просветите пожалуйста почему? И что я вообще такое нашел?

Это относится к открытию ПРОИЗВОЛЬНОЙ книги. Эти события надо активировать особым образом через модули класса. А у тебя открытие конкретной книги. Поэтому этот вариант тебе не нужен.

===========
Вот ещё по поводу автоматического запуска макроса при открытии (это я пару лет назад объяснял по тому же поводу, а тебе просто скопирую):

Есть два способа:
Или разместить в обычном модуле макрос с названием
Auto_Open, или разместить в модуле книги макрос Workbook_Open.

Отличие между ними состоит в следующем:
Workbook_Open. Он запускается и при открытии "руками" и при открытии программно (с помощью Workbooks.Open) - если только перед этим не были отключены обработчики ошибок командой Application.EnableEvents = False.

Auto_Open. Запускается только при открытии руками, зато не отключается .EnableEvents

Способов добавить файл в автозагрузку Excel достаточно много, поэтому мы рассмотрим только самые основные:

  • открытие файлов из папки автозапуска
  • подключение файла как надстройки

Начнём с папки автозагрузки (точнее, с папок, поскольку их может быть несколько)

При установке Excel создаётся специальный каталог XLSTART, все файлы из которого автоматически открываются в Excel при его запуске

Путь к этой папке можно получить макросом из свойства Application.StartupPath:

На моём компьютере (под управлением Windows XP), эта папка расположена по пути
C:\Documents and Settings\ \Application Data\Microsoft\Excel\XLSTART\,
для других версий OC путь может отличаться

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

Кстати, сами файлы перемещать в эту папку необязательно - достаточно поместить в папку автозапуска ЯРЛЫКИ на эти файлы
(например, ярлык можно создать путем перетаскавания мышом файла в папку, удерживая клавишу Alt)

Хочу обратить ваше внимание, что вы можете в настройках Excel указать ещё одну папку автозапуска, файлы из которой также будут открываться автоматическе при запуске Excel

Сделать это можно, если указать путь к вашей папке в параметре "Каталог автозагрузки":
(в Excel 2003 меню Сервис - Параметры, вкладка Общие)


Итак, у нас есть как минимум 2 папки, все файлы из которых будут открываться вместе с Excel.

Какие же ещё способы предоставляет нам программа?

Подключение надстройки Excel

Эта возможность предоставляется только для книг Excel, сохранённых как надстройка (с расширением XLA)

Если у нас есть такая надстройка, и мы хотим, чтобы она запускалась каждый раз при открытии Excel, мы можем её подключить через меню Сервис - Надстройки (в Excel 2003):
(чтобы этот пункт меню был доступен, в Excel должна быть открыта хоть одна книга (любая))


После этих действий, при каждом запуске приложения Excel ваша надстройка будет доступна (открыта)

Как видно из вышеприведённого скриншота, у меня вместе с Excel постоянно загружаются 4 надстройки (пятую я временно отключил)

А что же делать, спросите вы, если требуется макросом включать и отключать автозапуск той или иной надстройки?

В этом вам поможет мой макрос AddinAutoRun, который добавляет (создаёт) или удаляет ЯРЛЫК на текущий файл в папку автозапуска Excel

Код макроса достаточно прокомментирован, так что понимание его алгоритма не должно вызвать затруднений:

menu

Запуск макроса в Excel. Как запустить макрос при открытии файла?

Где посмотреть полившийся макрос и запустить его?

Самый удобный способ работы с макросами и связанными инструментами — вывести вкладку Разработчик на панель инструментов

Запуск макроса в Excel

Включается он несложно — заходим в левую, верхнюю кнопку Параметры Excel — раздел Основные — в правом окне ставим галочку Показывать вкладку Разработчик на ленте

Как мы видим, здесь большой выбор инструментов, от возможности зайти в Visual Basic до вставки объекта, например, кнопки.

Запуск макроса можно осуществить нажатием второй кнопки слева Макросы.

Появится окно для выбора макроса

Запуск макроса

Выбираем нужный — жмем выполнить.

Запуск макроса в Excel. Горячие клавиши

Открытие окна выбора макроса можно осуществить через горячую клавишу Alt + F8 . А зайти в окно редактирования макроса сочетанием Alt + F11.

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

Запуск макроса 2

В данным случае ctrl + Ё.

Автозапуск макроса при открытии книги

Зайдите в окно редактирования макроса Alt + F11 или нажмите кнопку Просмотр кода на панели Разработчик.

У вас откроется VBA. Ваш макрос (особенно записанный макрорекордером) будет храниться в отдельном отделе модулей в левой панели.

Для того, чтобы макрос запускался при открытии книги, его надо перенести в раздел эта книга.

Копируйте тело макроса из правого окна (между Sub и End Sub)

Автозапуск макросов

Выберите в левой панели ЭтаКнига (двойным левым кликом).

Как запустить макрос Эксель при открытии файла

В верхних панелях выбираем Workbook и признак включения макроса Open (открытие книги получается).

Копированный текст макроса из модуля вставляем между Private Sub и End Sub. Сохраняем. Закрываем VBA.

Готово! Запуск макроса будет происходить при открытии книги.

Не забудьте сохранить книгу с поддержкой макросов ( xlsm или xlsb ).

Дополнительные возможности запуска макроса при действии с книгой

Как вы могли увидеть при выборе Workbook в правом окне выбора доступно множество вариантов. Ниже команды, которые запускают макрос при действии с книгой:

  • Activate — при активации книги (при переходе из другого окна в эту книгу);
  • Deactivate — при переходе в другую книгу;
  • BeforeClose — перед закрытием книги;
  • BeforePrint — перед печатью книги;
  • BeforeSave — при сохранении книги;
  • NewSheet — при создании нового листа книги.

Дополнительные возможности запуска макроса при действии с листом

По аналогии с предыдущим пунктом, такие же действия можно привязать к определенному листу. Ниже команды, которые запускают макрос при действии с листом:

  • SheetActivate — при активации листа книги;
  • SheetDeactivate — при переходе на другой лист книги;
  • SheetCalculate — при пересчете формул на листе;
  • SheetBeforeDoubleClick — перед двойным кликом мыши;
  • SheetBeforeRightClick — перед кликом правой кнопкой мыши;
  • SheetChange — при изменение на листе

Если необходимо запустить макрос при изменении в ячейке — подробная инструкция есть в этой статье .

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

Код для автозагрузки при открытии Word:


Добавлю к ответу igumnov.

Код необходимо вставить в модуль ЭтаКнига (Для Word - ThisDocument)

Alt+F11 - открываем проект VBA. Слева - окно проекта, модуль находится там, в папке Microsoft Excel Objects

Исполняемый макрос записывается в общий модуль (в папке Modules).

Если модуля нет, его нужно создать: в редакторе VBA вкладка Insert-Module

Если окна проекта нет, открыть - меню Viev-Project Explorer (Ctrl+R)

Если макросы запрещены, никакими внутренними встроенными средствами поменять уровень безопасности нельзя. В VBA тоже нет такой команды. Это противоречило бы логике защиты: запрещаем макросы, но тем же макросом их разрешаем.

Поменять уровень безопасности вручную:

Для Excel-2003: меню Сервис-Макрос-Безопасность

Для Excel-2010 глубже: закладка ленты Файл-Параметры-Центр_управления_безопасностью-Параметры_центра_управления_безопасностью-Параметры_макросов

Программно менять уровень безопасности можно, но перед этим нужно установить на компьютер скрипт, который "умеет" менять уровень безопасности. Такие программы есть в свободном доступе.

Читайте также: