Макросы в Microsoft Excel — это мощный инструмент автоматизации, который может экономить часы рутинной работы. Но что делать, если вы унаследовали файл с макросами от коллеги, забыли названия своих собственных скриптов или подозреваете наличие скрытого кода? Просмотр всех макросов в книге — это первый шаг к их управлению, отладке или удалению.
Многие пользователи даже не подозревают, что в их файлах могут быть спрятаны десятки макросов — от простых записанных действий до сложных VBA-процедур, запускающихся по таймеру или при открытии книги. В этой статье мы разберём 5 рабочих способов найти макросы в любой версии Excel (2010–2023), включая скрытые модули и личные книги макросов. Вы также узнаете, как безопасно просматривать код и избегать типичных ошибок.
Если вы никогда не работали с Visual Basic for Applications (VBA), не беспокойтесь: мы объясним всё простым языком, без технического жаргона. А для опытных пользователей приготовили расширенные методы, например, поиск макросов через Object Browser или анализ ThisWorkbook.
1. Включаем вкладку «Разработчик» — основа работы с макросами
Без вкладки Разработчик (Developer) вы не сможете даже увидеть список макросов, не говоря уже о их редактировании. По умолчанию она скрыта, но включить её можно за 30 секунд:
- 📌 Excel 2010–2019:
Файл → Параметры → Настройка ленты. В правой колонке поставьте галочку напротивРазработчик. - 📌 Excel 2021/365: Путь тот же, но интерфейс может слегка отличаться — ищите вкладку в разделе
Основные вкладки. - 🔍 Если пункта нет: Возможно, у вас установлена Excel Starter или Excel Online — эти версии не поддерживают VBA.
После активации вкладки вы получите доступ к ключевым инструментам:
- 🖱️
Макросы— просмотр и запуск существующих скриптов. - 📝
Visual Basic— редактор VBA для просмотра кода. - 🔄
Запись макроса— создание новых процедур.
⚠️ Внимание: В Excel для Mac путь к настройкам ленты другой: Excel → Параметры → Лента и панель инструментов. Также некоторые макросы, написанные под Windows, могут не работать на macOS из-за различий в объектах VBA.
2. Способ 1: Просмотр макросов через меню «Макросы»
Самый быстрый метод — использовать встроенное окно Макросы. Оно показывает все доступные процедуры в текущей книге и личной книге макросов (Personal.xlsb), если она подключена.
Как открыть:
- Перейдите на вкладку
Разработчик. - Нажмите кнопку
Макросы(или используйте горячие клавишиAlt + F8). - В выпадающем списке
Макросы в:выберитеЭта книгадля просмотра локальных макросов.
В окне отобразятся:
- 📌 Имя макроса — как он называется в коде.
- 🖱️ Сочетание клавиш — если назначено (например,
Ctrl+Shift+N). - 📁 Расположение — в каком модуле или листе хранится.
- 🔍 Описание — если автор добавил комментарий.
Ограничение метода: здесь не отображаются макросы, привязанные к событиям (например, Worksheet_Change или Workbook_Open). Для их поиска нужен редактор VBA.
3. Способ 2: Поиск макросов в редакторе VBA
Редактор Visual Basic — это «под капотом» Excel, где хранится весь код. Здесь вы увидите все макросы без исключения, включая скрытые и системные. Чтобы открыть редактор:
- На вкладке
РазработчикнажмитеVisual Basic(илиAlt + F11). - В левой панели (
Project Explorer) разверните дерево объектов:
VBAProject (Имя_вашей_книги.xlsm)
├── Microsoft Excel Objects
│ ├── ThisWorkbook
│ ├── Sheet1 (Лист1)
│ └── ...
├── Modules
│ ├── Module1
│ └── ...
└── Forms (если есть)
Где искать макросы:
- 📄 Модули (
Modules) — здесь хранятся большинства пользовательских макросов. - 📑 Объекты книги (
ThisWorkbook) — макросы, срабатывающие при открытии/закрытии файла. - 📊 Листы (
Sheet1,Sheet2) — макросы, привязанные к конкретным листам (например, при изменении ячейки).
⚠️ Внимание: Если вProject Explorerнет папкиModules, это не значит, что макросов нет! Они могут быть спрятаны в объектах листов или книги. Используйте поиск по коду (Ctrl+F) с запросомSubилиFunction.
Проверьте папку Modules|Разверните ветку Microsoft Excel Objects|Ищите процедуры с префиксом Sub или Function|Просмотрите код в объекте ThisWorkbook-->
4. Способ 3: Поиск скрытых макросов и событий
Некоторые макросы не отображаются в окне Макросы (Alt+F8), потому что они привязаны к событиям. Например:
- 🔄
Workbook_Open— выполняется при открытии файла. - 📝
Worksheet_Change— срабатывает при изменении ячейки. - ⏱️
Workbook_BeforeClose— запускается перед закрытием книги.
Как их найти:
- Откройте редактор VBA (
Alt+F11). - Дважды кликните на объект
ThisWorkbook(в папкеMicrosoft Excel Objects). - В верхней части окна кода выберите в выпадающем списке
(General), затемWorkbook— появится список всех событий книги.
Аналогично проверьте каждый лист:
- Дважды кликните на
Sheet1(или другой лист). - В выпадающих списках выберите
(General)→Worksheet.
| Тип события | Пример макроса | Когда срабатывает |
|---|---|---|
| Открытие книги | Workbook_Open |
При открытии файла Excel |
| Изменение ячейки | Worksheet_Change(ByVal Target As Range) |
При редактировании любой ячейки на листе |
| Активация листа | Worksheet_Activate |
При переключении на лист |
| Закрытие книги | Workbook_BeforeClose(Cancel As Boolean) |
Перед сохранением и закрытием файла |
Как обнаружить макросы, запускающиеся по таймеру?
В VBA можно создавать макросы с задержкой выполнения через Application.OnTime. Чтобы их найти:
1. В редакторе VBA нажмите Ctrl+F.
2. Введите в поиск OnTime.
3. Проверьте все найденные процедуры — они могут запускать другие макросы через заданный интервал времени (например, каждые 5 минут).
5. Способ 4: Поиск макросов в личной книге макросов (Personal.xlsb)
Personal.xlsb — это скрытый файл, который загружается при каждом запуске Excel и хранит «глобальные» макросы, доступные во всех книгах. Многие пользователи забывают о его существовании, хотя там могут быть десятки процедур.
Как просмотреть макросы в Personal.xlsb:
- Откройте редактор VBA (
Alt+F11). - В
Project Explorerнайдите папкуVBAProject (PERSONAL.XLSB). - Разверните её и проверьте модули (
Modules) и объекты (ThisWorkbook).
Если папки PERSONAL.XLSB нет, значит:
- 🔴 Личная книга макросов не создана (вы никогда не сохраняли макросы с параметром
Личная книга макросов). - 🟡 Файл повреждён или скрыт (попробуйте найти его вручную по пути
%AppData%\Microsoft\Excel\XLSTART\).
⚠️ Внимание: Макросы из Personal.xlsb выполняются в контексте безопасности текущей книги. Если вы открываете файл с отключёнными макросами, глобальные процедуры тоже блокируются.
6. Способ 5: Используем Object Browser для продвинутого поиска
Инструмент Object Browser (F2 в редакторе VBA) позволяет искать макросы по их свойствам, методам и даже ключевым словам в коде. Это полезно, если вы ищете конкретную процедуру среди сотен строк.
Как пользоваться:
- Откройте редактор VBA и нажмите
F2(илиView → Object Browser). - В поле
Searchвведите имя макроса или ключевое слово (например,OpenилиSave). - В результатах ищите процедуры с иконкой 📝 (макросы) или 🔄 (функции).
Object Browser также показывает:
- 🔹 Библиотеки объектов — например,
Excel,VBA,Office. - 🔹 Классы и модули — где физически расположен макрос.
- 🔹 Члены класса — свойства и методы, которые использует макрос.
Пример: если вы ищете макрос, который работает с диапазонами, введите в поиске Range. Object Browser покажет все процедуры, где используется этот объект.
7. Как экспортировать список всех макросов для анализа
Если вам нужно документировать макросы (например, для передачи коллеге или аудита), можно автоматически сгенерировать их список. Для этого:
- Откройте редактор VBA (
Alt+F11). - Нажмите
Insert → Moduleи вставьте следующий код:
Sub ExportMacroList()
Dim vbComp As VBComponent
Dim vbProj As VBProject
Dim ws As Worksheet
Dim i As Long
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "Список макросов"
ws.Cells(1, 1).Value = "Имя макроса"
ws.Cells(1, 2).Value = "Тип"
ws.Cells(1, 3).Value = "Модуль"
i = 2
Set vbProj = ThisWorkbook.VBProject
For Each vbComp In vbProj.VBComponents
If vbComp.Type = vbext_ct_StdModule Or _
vbComp.Type = vbext_ct_ClassModule Or _
vbComp.Type = vbext_ct_Document Then
Dim codeLine As Long
For codeLine = 1 To vbComp.CodeModule.CountOfLines
Dim lineText As String
lineText = vbComp.CodeModule.Lines(codeLine, 1)
If Left(Trim(lineText), 3) = "Sub" Or Left(Trim(lineText), 8) = "Function" Then
ws.Cells(i, 1).Value = Trim(Split(lineText, " ")(1))
ws.Cells(i, 2).Value = IIf(Left(lineText, 3) = "Sub", "Процедура", "Функция")
ws.Cells(i, 3).Value = vbComp.Name
i = i + 1
End If
Next codeLine
End If
Next vbComp
End Sub
Запустите макрос (F5), и в книге появится новый лист Список макросов со всеми процедурами, их типами и модулями, где они хранятся.
⚠️ Внимание: Этот код не найдёт макросы в Personal.xlsb! Чтобы экспортировать их, заменитеThisWorkbook.VBProjectнаApplication.VBE.VBProjects("PERSONAL.XLSB")(убедитесь, что файл существует).
FAQ: Частые вопросы о просмотре макросов в Excel
Можно ли увидеть макросы в файле Excel, если они отключены?
Нет. Если при открытии файла вы выбрали Отключить макросы, то просмотреть их код или список через Alt+F8 не получится. Сначала включите макросы (Файл → Сведения → Включить содержимое) и перезагрузите книгу.
Как найти макрос, который запускается при открытии файла?
Это макрос Workbook_Open, который хранится в объекте ThisWorkbook. Откройте редактор VBA (Alt+F11), дважды кликните на ThisWorkbook и ищите процедуру с именем Workbook_Open.
Почему в окне «Макросы» (Alt+F8) не отображаются некоторые процедуры?
Окно Макросы показывает только процедуры с модификатором Public. Если макрос объявлен как Private, он виден только в редакторе VBA. Также там не отображаются макросы, привязанные к событиям (например, Worksheet_Change).
Как узнать, есть ли в файле Excel макросы, не открывая его?
Проверьте расширение файла: если оно .xlsm (Macro-Enabled), то макросы есть. Файлы .xlsx не поддерживают VBA. Также можно открыть файл в Блокноте и поискать строку vbaProject — её наличие указывает на присутствие макросов.
Можно ли восстановить удалённый макрос?
Если вы не сохраняли книгу после удаления, закройте Excel без сохранения и откройте файл заново. Если сохранение было — попробуйте восстановить предыдущую версию через Файл → Сведения → Управление книгой → Восстановить (для OneDrive/SharePoint) или используйте резервные копии.