Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно? |
Практические примеры программирования для MS Word
12.4. Точная замена
12-04-Точная замена.docm - пример к п. 12.4.
Довольно часто, при работе с текстами возникает необходимость их проверки и обработки некоторых символов и их последовательностей. Например, это касается удаления двойных пробелов, замены обычного тире на длинное, замены буквы е на ё, и т.д. Все эти замены можно сделать с помощью средства Найти и заменить. Однако, несложно заметить, что даже несколько таких замен отнимают много времени - нужно ввести данные в окно, дождаться выполнения операции, ввести другие данные. Логично было бы автоматизировать этот процесс.
12.4.1. Условие
Написать программу на VBA, которая позволяла бы автоматизировать процесс замены одних комбинаций символов другими. В частности, предусмотреть выбор среди следующих объектов замены: заменить букву е на ё, удалить двойные пробелы, заменить обычное тире на длинное. Предусмотреть возможность задавать один из объектов пользователем.
12.4.2. Решение
Создадим пользовательскую форму (рис. 12.1.).
Основные элементы управления, которые мы используем, это следующие флажки (табл. 12.1.).
Имя элемента управления | Подпись |
---|---|
chk_Space | Заменить двойные пробелы на одинарные |
chk_Yo | Заменить букву е на ё |
chk_LongDash | Заменить обычные тире на длинные |
chk_User | Пользовательская замена |
cmd_OK | ОК |
Если выбран флажок chk_User - активируются два текстовых поля ( txt_One и txt_Two ). Их свойства Enabled первоначально установлены в False, при выборе флажка оно устанавливается в True, при снятии - обратно в False. В поле txt_One пользователь может записать последовательность символов, которую нужно заменить на последовательность, которую он может ввести в txt_Two.
Ниже приведен код пользовательских процедур и обработчиков событий элементов управления, которые реализуют вышеописанную функциональность. Листинг 12.4. содержит код обработки события Change для chk_User.Листинг 12.5. представляет собой код, который выполняется при нажатии на кнопку ОК, которая запускает процесс замен. Листинг 12.6. содержит код процедуры, которая вызывает стандартное средство для замены.
Private Sub chk_User_Change() 'Выполняется при изменении состояния 'флажка chk_User If chk_User = True Then 'Если флажок установлен 'активировать поля txt_One.Enabled = True txt_Two.Enabled = True Else 'Если флажок снят 'заблокировать поля txt_One.Enabled = False txt_Two.Enabled = False End If End SubЛистинг 12.4. Обработка события Change для chk_User
Private Sub cmd_Ok_Click() 'Обработчик нажатия кнопки 'Проверяем, установлен ли каждый 'из флажков и в зависимости от этого 'выполняем вызов пользовательской процедуры 'которая содержит код вызова средства 'Найти и заменить If chk_Space = True Then Call ReplaceThis(" ", " ") End If If chk_Yo = True Then Call ReplaceThis("е", "е") End If If chk_LongDash = True Then Call ReplaceThis("-", "-") End If If chk_User = True Then Call ReplaceThis(txt_One, txt_Two) End If End SubЛистинг 12.5. Обработка события нажатия на кнопку cmd_OK
Public Sub ReplaceThis(str_1, str_2 As String) 'Пользовательская процедура 'Принимает два параметра 'str_1 - это символ, который надо заменить 'str_2 - символ, на который надо заменить 'Поиск и замена во всем документе ActiveDocument.Content. _ Find.Execute _ FindText:=str_1, ReplaceWith:=str_2, _ Replace:=wdReplaceAll End SubЛистинг 12.6. Процедура вызова стандартного средства поиска и замены символов
Программа, которую мы написали в этом примере, может использоваться на практике в своем исходном виде. Однако, скорее всего вам захочется дополнить ее собственными символами для замены.
12.5. Проверка правильности создания документа
12-05-Проверка правильности.docm - пример к п. 12.5.
Этот пример будет посвящен использованию стилей при программной обработке документов. Стиль - это набор правил форматирования документа, имеющий имя.
12.5.1. Условие
Предположим, что в нашем документе используется стиль с именем PicLink для форматирования ссылки на изображение в тексте, и стиль PicName - для самого имени изображения. Изображение должно следовать в документе сразу после его упоминания в тексте. Нужно написать программу, которая проверяет номера изображений, упомянутых в тексте и номера иллюстраций и составляет после проверки отчет о соответствии ссылок на иллюстрации их реальным номерам. Для нумерования иллюстраций используется конструкция такого вида: "Рис. X".
12.5.2. Решение
Для начала создадим два стиля. Один назовем PicLink, второй - PicName. Для создания стиля отформатируйте какой-нибудь участок документа так, как нужно, после чего выделите его, щелкните по выделению правой кнопкой мыши и выберите в появившемся меню пункт Стили o Сохранить выделенный фрагмент как новый экспресс-стиль. Появится окно для настройки свойств стиля, разверните его кнопкой Изменить (рис. 12.2.). Задайте имя стиля, место сохранения, в поле Стиль выберите Знака, и нажмите кнопку OK.
В листинге 12.7. вы можете найти код, с помощью которого реализуется функциональность, о которой идет речь в условии задачи. Этот макрос просматривает документ и проверяет, следует ли за упоминанием иллюстрации в тексте заголовок иллюстрации. В ходе проверки программа составляет отчет, который она выгружает в отдельный файл.
'Для хранения ссылки на символ Dim obj_Char As Range 'Для хранения текста ссылки на 'изображение Dim str_PicLink As String 'Для хранения текста названия 'изображения Dim str_PicName As String 'Для хранения текста отчета Dim str_ResultText 'Счетчик иллюстраций Dim num_Counter 'Ссылка на документ с отчетом Dim obj_Doc As Document 'Для каждого символа в документе For Each obj_Char In ActiveDocument.Characters 'Если стиль символа - PicLink 'и символ является цифрой, точкой или 'косой чертой - добавляем символ 'в переменную If obj_Char.Style = "PicLink" Then If Asc(obj_Char.Text) >= 46 And _ Asc(obj_Char.Text) <= 57 Then str_PicLink = str_PicLink + _ obj_Char.Text End If End If 'Аналогично - для стиля PicName If obj_Char.Style = "PicName" Then If Asc(obj_Char.Text) >= 46 And _ Asc(obj_Char.Text) <= 57 Then str_PicName = str_PicName + _ obj_Char.Text End If End If 'Если стиль - не PicLink и не PicName 'и переменные, хранящие симолы, взятые 'из ссылки на рисунок и названия, не 'пусты - проверяем, одинаковы ли эти 'символы и формируем строку для 'последующего вывода в файл отчета If obj_Char.Style <> "PicLink" And _ obj_Char.Style <> "PicName" And _ Len(str_PicLink) > 0 And _ Len(str_PicName) > 0 Then 'Увеличим на 1 счетчик изображений num_Counter = num_Counter + 1 If str_PicLink = str_PicName Then str_ResultText = str_ResultText + _ "Иллюстрация №" + Str(num_Counter) + _ " " + str_PicLink + " верно" + _ " пронумерована" + Chr(13) Else str_ResultText = str_ResultText + _ "Внимание! Иллюстрация №" + _ Str(num_Counter) + _ " " + str_PicLink + " неверно" + _ " пронумерована" + Chr(13) End If 'Сбросим переменные для хранения 'новой информации str_PicLink = "" str_PicName = "" End If Next 'сформируем файл отчета Set obj_Doc = Documents.Add obj_Doc.Activate Selection.TypeText str_ResultTextЛистинг 12.7. Макрос для проверки правильности документа
12.6. Заключение
Мы рассмотрели множество вопросов программирования для Microsoft Word. Теперь вы сможете сделать с помощью этого редактора много полезного.
Пришло время поговорить о MS Excel. Помимо программирования для Excel, в следующей теме мы рассмотрим такие важные вопросы, как взаимодействие приложений и работа с базами данных.