VBA в Word и Access
После VBScript в типовом курсе информатики обычно разбирают VBA не только в Excel, но и в Word и Access. В энциклопедии Excel уже есть в VBA в Excel; здесь — документы и базы данных.
Синтаксис тот же (Sub, Dim, If, циклы) — см. основы и VBScript.
Три приложения Office — одна идея, разные объекты
| Приложение | Главный объект | Типичная задача VBA |
|---|---|---|
| Excel | Workbook, Worksheet, Range | расчёты, отчёты в ячейках → глава 8 |
| Word | Document, Selection, Range | шаблоны, письма, слияние |
| Access | CurrentDb, Form, Report | формы ввода, отчёты, запросы |
VBA — один язык; меняется объектная модель host-приложения.
VBA в Microsoft Word
Где пишут код
- Alt+F11 — редактор VBA (VBE), как в Excel.
- Insert → Module — общие процедуры.
- ThisDocument — код, привязанный к текущему
.docm. - Вкладка Разработчик → Запись макроса — Word генерирует VBA из действий пользователя (удобный способ увидеть API).
Документ с макросами сохраняют как .docm, не .docx.
Минимальная иерархия объектов
| Объект | Роль | Пример |
|---|---|---|
Application | Word целиком | Application.ScreenUpdating = False |
ActiveDocument | открытый документ | ActiveDocument.Save |
Selection | выделение, курсор | Selection.TypeText "Hello" |
Range(start, end) | фрагмент текста | Set r = ActiveDocument.Range(0, 10) |
Вставка текста в конец документа:
Sub AddLine()
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Selection.TypeText "Новая строка из макроса"
End Sub
Обход абзацев:
Sub CountParagraphs()
Dim p As Paragraph
Dim n As Long
n = 0
For Each p In ActiveDocument.Paragraphs
n = n + 1
Next p
MsgBox "Абзацев: " & n
End Sub
События документа
В модуле ThisDocument:
Private Sub Document_Open()
' AutoOpen — историческое имя; в Word чаще Document_Open
MsgBox "Документ открыт"
End Sub
В учебниках и старых макросах встречают AutoOpen — процедура с таким именем в модуле документа выполняется при открытии (аналогично Auto_Open в Excel).
Word и Excel в одной системе
Типичный корпоративный сценарий — Access или SQL хранит данные, Word формирует печатные формы (слияние), Excel — расчёты. VBA связывает приложения через Automation:
Dim xl As Object
Set xl = CreateObject("Excel.Application")
xl.Visible = True
xl.Workbooks.Add
xl.ActiveSheet.Range("A1").Value = 100
VBA в Microsoft Access
Access — СУБД и конструктор форм. VBA дополняет запросы SQL, макросы Access и выражения в полях.
Объекты, с которых начинают
| Объект | Назначение |
|---|---|
CurrentDb | текущая база .accdb / .mdb |
Recordset | набор строк запроса или таблицы |
Form / Report | окно ввода или печати |
DoCmd | команды UI — открыть форму, запустить отчёт |
Простой запрос из VBA:
Sub ShowCustomers()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM Customers")
Do While Not rs.EOF
Debug.Print rs!CompanyName
rs.MoveNext
Loop
rs.Close
End Sub
!FieldName — краткая запись доступа к полю Recordset в VBA для Access.
Формы и отчёты
На форме кнопка Открыть отчёт:
Private Sub cmdReport_Click()
DoCmd.OpenReport "SalesReport", acViewPreview
End Sub
События формы — Form_Load, BeforeUpdate, AfterUpdate — та же событийная модель, что у WinForms (глава 6).
Связь с теорией БД
В курсах информатики Access часто проходят через таблицы, формы, отчёты и запросы. Углубление в энциклопедии — Основы баз данных и базовая информатика — базы данных.
Access подходит для локальных учебных и малых офисных систем; крупные проекты переносят на серверные СУБД (PostgreSQL, SQL Server), а VBA остаётся в legacy.
Отличия VBA от VBScript и VB.NET
| VBScript | VBA | VB.NET | |
|---|---|---|---|
| Файл | .vbs | внутри .docm, .xlsm, .accdb | .vbproj |
| Среда | WScript | VBE в Office | Visual Studio |
| Новые классы | нет | UserForm, классы в VBA7 | полное ООП |
| Ошибки | On Error GoTo | On Error GoTo | Try…Catch |
Расширенный справочник по конструкциям VBA (GoTo, Type…End Type, Enum, Like, Mid) — в 711; для экзамена достаточно знать On Error, Set для объектов и For Each.
Рекомендуемый порядок
| Шаг | Действие | Материал |
|---|---|---|
| 1 | Пройти синтаксис | VBScript или основы |
| 2 | Excel — ячейки и Range | 8 |
| 3 | Word — Selection, запись макроса | этот раздел |
| 4 | Access — форма + запрос + отчёт | этот раздел + БД |
| 5 | VB.NET в Visual Studio | 7 |
Безопасность
- Макросы Word/Access могут менять файлы и запускать программы — включайте только доверенные документы.
- Макро-вирусы (AutoOpen, заражение
.doc) — см. антивирус в базовой информатике. - Для новых автоматизаций Microsoft продвигает Office Scripts (JavaScript) и Power Automate; VBA остаётся в установленной базе Office.
Что дальше
- VBA в Excel — если курс начинается с таблиц
- Справочник WinForms и VBA
- Чек-лист раздела
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). История Visual Basic: эволюция от BASIC до современных реализаций в экосистеме Microsoft. Практика VB.NET: консольные программы, dotnet CLI, выбор коллекций и чтение/запись файлов через BCL. VB.NET: лямбда-выражения, Func/Action, LINQ, перегрузка операторов, индексаторы и IEnumerable для For Each. VBScript — WScript, первый .vbs, типы, циклы, процедуры и объекты ActiveX; связь с VBA и VB.NET. Расширенные основы Visual Basic: синтаксис, базовые конструкции, модель выполнения и практические ориентиры. Архитектура приложений на Visual Basic: структура проекта, компоненты и подходы к построению Windows-приложений. Типизация и набор правил определения типов данных в Visual Basic. Управляющие конструкции и операторы Visual Basic: условия, циклы, выражения и практические шаблоны принятия решений. Процедуры и события в Visual Basic: обработчики, жизненный цикл событий и организация прикладной логики. Подробный гайд по установке и запуску первой программы на VB.NET и историческому варианту VB6. Справочник-шпаргалка по visual-basic: типы, синтаксис, стандартная библиотека и типовые паттерны. Не заменяет пошаговое обучение. Краткий ввод в Visual Basic for Applications: макросы, объектная модель Excel и отличия от VB.NET.История языка visual-basic
Консоль и файлы
Лямбды и LINQ
VBScript
Основы языка visual-basic
Архитектура приложений на visual-basic
Типы данных в visual-basic
Управляющие конструкции и операторы visual-basic
Процедуры и события в visual-basic
Первая программа на visual-basic
Справочник по visual-basic
VBA в Excel