Visual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.
С помощью этого языка можно легко упростить монотонный набор действий, выполнение которых занимает много времени.
Например, можно автоматизировать обработку содержимого ячеек в Excel или ускорить исправление ошибок оформления документов в Word. Написание макросов для Excel пользуется популярностью у продвинутых пользователей Microsoft Office. Кому-то удается научиться этому самостоятельно, а кто-то записывается на курсы Excel в Алматы или в своем городе.
Созданные программы на языке VBA называются макросами.
Попробуем создать простой макрос обработки текста в Word.
Для начала стоит понять какая последовательность действий прописывается в макрос с помощью макрорекордера (инструмент для записи ваших действий с помощью кода VBA).
Для примера найдем все точки в тексте и заменим их на запятые. Заходим на вкладку Разработчик -> Код -> Запись макроса.
Теперь перейдем на вкладку Главная -> Редактирование -> Заменить. Вводим «.» в поле Найти и «,» в поле Заменить на. Жмем Заменить все.
Теперь останавливаем запись макрорекордера командой Разработчик -> Код -> Остановить запись.
Это все! Ваш первый макрос готов. Давайте же посмотрим на него. Заходим Разработчик -> Код -> Visual Basic. В окне редактирования кода появится такая штука:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "."
.Replacement.Text = ","
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
Постановка задачи. На основе этого кода создать более функциональный макрос. Пусть он будет проводить поиск и замену пробелов возле точек, запятых, новых строк, скобок и заменять несколько подряд стоящих пробелов на один.
Для этого будут использоваться регулярные выражения (конструкции для поиска и осуществления манипуляций с подстроками в тексте, основанные на использовании метасимволов).
Для поискомого и заменяемого текста в макросе используются следующие строки
.Text = "."
.Replacement.Text = ","
Использованные конструкции регулярных выражений приведены в таблице.
Что изменяем | Найти | Заменить на |
---|---|---|
убрать пробелы между словом и точкой | "([а-я]) @(.)" |
"\1\2" |
добавить пробел между точкой и следующим предложением | "([а-я].@)([А-Я])" |
"\1 \2" |
убрать пробелы между словом и запятой | "([а-я]) @(,)" |
"\1\2" |
добавить пробел между запятой и следующим словом | "([а-я],)([а-я])" |
"\1 \2" |
убрать пробелы между точкой и переходом на следующую строку | "(.) (^13)" |
"\1\2" |
убрать повторяющиеся пробелы | "( ){2;}" |
" " |
убрать пробел после открывающей скобкой | "\( " |
"(" |
убрать пробел перед закрывающей скобки | " \)" |
")" |
Теперь необходимо все это оформить в компактном виде. Для этого удобно создать пару массивов и загнать все в цикл.
В итоге получим:
Sub Замена()
Dim arrText() As Variant
arrText = Array("([а-я]) @(.)", _
"([а-я].@)([А-Я])", _
"([а-я]) @(,)", _
"([а-я],)([а-я])", _
"(.) (^13)", _
"( ){2;}", _
"\( ", _
" \)")
Dim arrReplaceText() As Variant
arrReplaceText = Array("\1\2", _
"\1 \2", _
"\1\2", _
"\1 \2", _
"\1\2", _
" ", _
"(", _
")")
Selection.WholeStory
For i = 0 To UBound(arrText)
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = arrText(i)
.Replacement.Text = arrReplaceText(i)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Next
End Sub
Полученный макрос сохраняем вместе с документом. Вызвать макрос можно из меню Разработчик или с помощью назначенной комбинации горячих клавиш (Файл -> Параметры -> Настройка ленты -> Сочетания клавиш: Настройка…)
Автор: Stanislaw