Институт управления, бизнеса и права
Опубликован: 25.03.2009 | Доступ: свободный | Студентов: 7323 / 1525 | Оценка: 4.41 / 4.15 | Длительность: 14:33:00
Лекция 12:

Практические примеры программирования для MS Word

< Лекция 11 || Лекция 12: 12 || Лекция 13 >

12.4. Точная замена

12-04-Точная замена.docm - пример к п. 12.4.

Довольно часто, при работе с текстами возникает необходимость их проверки и обработки некоторых символов и их последовательностей. Например, это касается удаления двойных пробелов, замены обычного тире на длинное, замены буквы е на ё, и т.д. Все эти замены можно сделать с помощью средства Найти и заменить. Однако, несложно заметить, что даже несколько таких замен отнимают много времени - нужно ввести данные в окно, дождаться выполнения операции, ввести другие данные. Логично было бы автоматизировать этот процесс.

12.4.1. Условие

Написать программу на VBA, которая позволяла бы автоматизировать процесс замены одних комбинаций символов другими. В частности, предусмотреть выбор среди следующих объектов замены: заменить букву е на ё, удалить двойные пробелы, заменить обычное тире на длинное. Предусмотреть возможность задавать один из объектов пользователем.

12.4.2. Решение

Создадим пользовательскую форму (рис. 12.1.).

Форма для настройки замены символов

Рис. 12.1. Форма для настройки замены символов

Основные элементы управления, которые мы используем, это следующие флажки (табл. 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.2. Создание стиля

В листинге 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, в следующей теме мы рассмотрим такие важные вопросы, как взаимодействие приложений и работа с базами данных.

< Лекция 11 || Лекция 12: 12 || Лекция 13 >
Евгений Ушаков
Евгений Ушаков

Добрый день! Поясните, пожалуйста, 3000 р. стоит документ об окончании курса. Если он не нужен, то можно учиться бесплатно?

Александр Новиков
Александр Новиков

Добрый день! Очень нужен справочник по объектам VBA c описание их методов и свойств.

Кто-нибудь знает, где можно приобрести?

(Он конечно есть в VBA - Object browser, но не очень удобный)