Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Редактирование_документо...doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
179.2 Кб
Скачать

11.4.2. Решение

Создадим новый макрос ( Copy_To_File ), воспользовавшись окном Макросы, которое можно открыть с вкладки Вид.

Добавим в макрос код из листинга 11.5.

'Переменая для хранения ссылки на новый документ

Dim obj_NewDoc As Document

'Для ссылки на исходный документ

Dim obj_OurDoc As Document

'Динамический массив для хранения слов

Dim WordsArray() As String

'Переменная для хранения количества слов

Dim WordsCount

'Переменная для формирования строк,

'которые выводятся в новый документ

Dim OutString

'Переменная для хранения количества

'символов в обработанных словах

Dim LettersCount

'В этой переменной будем создавать

'имя файла

Dim NewDocName

'Запишем ссылку на активный документ

'Для того, чтобы вернуться в него

'после работы с новым документом

Set obj_OurDoc = ActiveDocument

WordsCount = Selection.Words.Count

LettersCount = Selection.Characters.Count

ReDim WordsArray(WordsCount)

'Переносим слова из выделения

'в массив для удобства работы с ними

For i = 1 To WordsCount

WordsArray(i) = Selection.Words.Item(i)

Next i

'Создадим новый документ

Set obj_NewDoc = Documents.Add

'И сделаем его активным

obj_NewDoc.Activate

'Теперь объект Selection относится к активному

'документу и мы начинаем вводить в него данные

Selection.TypeText ("Список выделенных слов")

Selection.TypeParagraph

For i = 1 To WordsCount

OutString = "Слово №" + Str(i) + ": " + _

WordsArray(i)

Selection.TypeText (OutString)

Selection.TypeParagraph

Next i

Selection.TypeText ("Всего обработано " + _

Str(WordsCount) + _

" слов(а), в которых содержится " + _

Str(LettersCount) + " символа(ов)")

'Создаем имя нового документа

NewDocName = obj_OurDoc.Name + " " + _

Str(Date) + " Обработано.docx"

'Установим корневой каталог диска C:

'для сохранения нового файла по умолчанию

ChangeFileOpenDirectory "C:\"

'Используем метод SaveAs для

'автоматического сохранения

'документа

ActiveDocument.SaveAs _

FileName:=NewDocName, _

FileFormat:=wdFormatDocumentDefault

'Закрываем активный документ

ActiveDocument.Close

'Активируем документ, в котором мы выделяли

'слова

obj_OurDoc.Activate

'Отмечаем обработанный участок

'скобками и выделением синим цветом

Selection.InsertAfter (") ")

Selection.InsertBefore (" (")

Selection.Font.Color = wdColorBlue

'Выделяем первый символ текущего выделения и

'выводим сообщение о том, что операция

'выполнена

Selection.Characters(1).Select

MsgBox ("Выполнено!")

Листинг 11.5. Решение задачи (htmltxt)

Как видите, в этом примере мы используем исключительно объект Selection для работы с текстом документов. Обратите внимание на то, что мы нигде специально не храним информацию о выделенной области первого документа. Создав второй документ, мы просто делаем его активным и работаем с ним, используя его объект Selection. В это время выделение сохраняется в исходном документе. Однако, если в это время пользователь случайно или умышленно изменит выделение текущего документа — программа будет работать неправильно — она выделит не тот фрагмент, который был передан ей для обработки, а совсем другой.