Перейти к основному содержимому

VBA в Word и Access

Разработчику

После VBScript в типовом курсе информатики обычно разбирают VBA не только в Excel, но и в Word и Access. В энциклопедии Excel уже есть в VBA в Excel; здесь — документы и базы данных.

Синтаксис тот же (Sub, Dim, If, циклы) — см. основы и VBScript.


Три приложения Office — одна идея, разные объекты

ПриложениеГлавный объектТипичная задача VBA
ExcelWorkbook, Worksheet, Rangeрасчёты, отчёты в ячейках → глава 8
WordDocument, Selection, Rangeшаблоны, письма, слияние
AccessCurrentDb, Form, Reportформы ввода, отчёты, запросы

VBA — один язык; меняется объектная модель host-приложения.


VBA в Microsoft Word

Где пишут код

  1. Alt+F11 — редактор VBA (VBE), как в Excel.
  2. Insert → Module — общие процедуры.
  3. ThisDocument — код, привязанный к текущему .docm.
  4. Вкладка РазработчикЗапись макроса — Word генерирует VBA из действий пользователя (удобный способ увидеть API).

Документ с макросами сохраняют как .docm, не .docx.

Минимальная иерархия объектов

ОбъектРольПример
ApplicationWord целиком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

VBScriptVBAVB.NET
Файл.vbsвнутри .docm, .xlsm, .accdb.vbproj
СредаWScriptVBE в OfficeVisual Studio
Новые классынетUserForm, классы в VBA7полное ООП
ОшибкиOn Error GoToOn Error GoToTry…Catch

Расширенный справочник по конструкциям VBA (GoTo, Type…End Type, Enum, Like, Mid) — в 711; для экзамена достаточно знать On Error, Set для объектов и For Each.


Рекомендуемый порядок

ШагДействиеМатериал
1Пройти синтаксисVBScript или основы
2Excel — ячейки и Range8
3Word — Selection, запись макросаэтот раздел
4Access — форма + запрос + отчётэтот раздел + БД
5VB.NET в Visual Studio7

Безопасность

  • Макросы Word/Access могут менять файлы и запускать программы — включайте только доверенные документы.
  • Макро-вирусы (AutoOpen, заражение .doc) — см. антивирус в базовой информатике.
  • Для новых автоматизаций Microsoft продвигает Office Scripts (JavaScript) и Power Automate; VBA остаётся в установленной базе Office.

Что дальше


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").