Visual Basic for Applications (VBA, Visual Basic для приложений) — немного упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.

С помощью этого языка можно легко упростить монотонный набор действий, выполнение которых занимает много времени.

Например, можно автоматизировать обработку содержимого ячеек в Excel или ускорить исправление ошибок оформления документов в Word.

Созданные программы на языке 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


2016-05-16 • Просмотров [ 323 ]