Чтение онлайн

на главную

Жанры

Тайны и секреты компьютера

Орлов Антон

Шрифт:

1. Выполнить обработку активного документа, сохранить его и закрыть.

2. Посмотреть, есть ли еще открытые документы.

3. Если есть, то перейти к пункту 1, если нет, то завершить работу.

"Если" — по-английски «If». Поищем по этому слову в Предметном указателе справки. Получаем строчку: "Инструкция If", выбрав которую, получаем окно из различных сочетаний слов If, Then, Else и др. [7]

Выберем "Инструкция If…Then…Else" — вроде первое слово понятнее. Получаем справку, из которой узнаем синтаксис команды:

7

Повторите это на своем компьютере.

If условие Then [инструкции] [Else инструкции_else]

Какое

же условие должно быть у нас? Наверное, подсчет количества открытых документов — если не 0, то продолжать работу, а если 0, то остановиться. А как можно подсчитать количество открытых документов? Посмотрим, нет ли в VBA команды для такого подсчета? Напишем в тексте программы: «Documents», поставим точку и просмотрим выпавший список. Так и есть — в списке имеется метод «Count»: скорее всего, это функция подсчета. Выберем ее из списка и посмотрим по ней справку и пример — да, эта команда считает открытые документы. То есть условие должно выглядеть как "If Documents.Count > 0 Then … ". Ну, а инструкции — переход к метке — нами уже написаны.

Часть команды "Else …" можно опустить, а просто написать нужные инструкции после команды "If…" — ведь все равно к их выполнению программа не перейдет до тех пор, пока останутся открытые документы. А поместить там, наверное, стоит вызов сообщения, желательно со звуковым сигналом, — чтобы можно было поставить документы на обработку и отойти. Используем функцию MsgBox (о ее синтаксисе подробно написано в справке):

signal = MsgBox("Обработка закончена", vbInformation, "Обработка текстов")

Итак, программа готова. Можно с помощью диалогового окна «Настройка» назначить ей кнопку, пункт меню или сочетание клавиш, и запускать ее при необходимости.

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

Опять воспользуемся Справкой. В Предметном указателе зададим слова "dialog boxes", выберем эту же строчку из списка тем. В появившемся окне выбора выберем второе — "Displaying Built-In Word Dialog-Boxes", так как это, судя по названию, более общая тема, чем список аргументов диалоговых окон. Читаем… В переводе текст справки означает, что с помощью команды Dialogs("имя диалога"). Show можно вызвать на экран любое встроенное диалоговое окно Word, вроде окна открытия файла или сохранения в папке. Попробуем найти окно, которое возвращало бы путь к какой-нибудь директории. Для этого создадим очередной экспериментальный модуль и будем перебирать в нем все возможные имена диалоговых окон (рис. 3.11).

Рис. 3.11. Для поиска нужной команды можно перебрать список встроенных диалоговых окон Word.

В качестве метода вывода окна на экран установим".Display" — вывод окна на экран без каких-либо последующих действий: если с помощью команды Dialogs(wdDialogFileOpen). Show будет выведено окно открытия файла, то при нажатии кнопки «Открыть» в нем выбранный в окне файл будет открыт, а если окно выводилось командой Dialogs(wdDialogFileOpen). Display, то открытия файла не произойдет, но имя выбранного файла можно будет записать в переменную:

With Dialogs(wdDialogFileOpen)

Display

imya=.Name

End With

и впоследствии использовать это имя по своему усмотрению.

При использовании встроенных диалоговых окон Word обязательно использование оператора With, так как, казалось бы, эквивалентный фрагмент кода

Dialogs(wdDialogFileOpen). Display

imya=Dialogs(wdDialogFileOpen). Name

работать не будет.

После перебора остановимся на окне Dialogs(wdDialogCopyFile) — копирование файла. Посмотрев ссылку "Built-in dialog box argument lists" окна "Displaying built-in Word dialog boxes", получаем список всех возможных аргументов диалоговых окон (то есть параметров, значения которых можно получить из окон или задать им). Нас интересует параметр «Directory» (папка, куда скопируется файл, указанный в параметре «FileName» при выполнении

метода «Show» или «Execute» — при выполнении последнего метода происходит задание или получение необходимой информации из параметров диалогового окна без отображения собственно диалога). Поэкспериментируем с этим окном — напишем в экспериментальном модуле следующий код:

Sub experience4

With Dialogs(wdDialogCopyFile)

Display

papka =.Directory

End With

MsgBox papka

End Sub

Запустив эту программу несколько раз, получаем, что в переменную «papka» записывается путь и имя папки, но, если в пути или имени были пробелы, то путь окаймляется кавычками: "C: \Program Files\Microsoft Office\Шаблоны\", а если пробелов в пути не было, то кавычки по краям не ставятся. Поэтому возвращаемую переменную нужно обработать — убрать кавычки. Сделать это можно с помощью уже известных нам команд «Left», «Rigth», «Mid» и "Len":

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

"Chr$(34)" — это команда, которая возвращает символ с ASCII-кодом 34: кавычку. (Каждый символ в Dos и Windows имеет свой номер — ASCII-код, по которому его можно вызвать на экран. Узнать код выделенного символа можно командой "MsgBox Asc(Selection.Text)". Узнать о командах "Chr$" и «Asc» можно, порывшись в справке.)

Кроме того, не мешало бы сделать так, чтобы при запуске программы окно "Копирование файла" по умолчанию стояло бы на директории с активным документом — не всегда же нужно сохранять все обрабатываемые документы в отдельной папке! Нет ничего проще — установим параметр «Directory» как "ActiveDocument.Name" перед командой".Display":

With Dialogs(wdDialogCopyFile)

Directory = ActiveDocument.Path

Display

papka =.Directory

End With

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

Это и есть необходимый код для отображения диалогового окна и получения пути к папке для сохранения обработанных документов. Наконец, сделаем так, чтобы нажатие кнопки «Отмена» в диалоговом окне приводило бы не к простому продолжению работы программы, а к выходу из нее. Для этого в справке по слову".Display" узнаем, что эта команда является функцией — то есть возвращает определенное значение, в зависимости от того, какая кнопка была нажата. Добавим в программу условие и команду выхода из программы:

With Dialogs(wdDialogCopyFile)

Directory = ActiveDocument.Path

If.Display = 0 Then Exit Sub

papka =.Directory

End With

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

Теперь при нажатии кнопки «Отмена» в диалоговом окне выбора папки произойдет выход из программы.

Окончательный вид нашего макроса:

Sub Макрос1

' Программа для обработки документов

With Dialogs(wdDialogCopyFile)

Directory = ActiveDocument.Path

If.Display = 0 Then Exit Sub

papka =.Directory

End With

If Right(papka, 1) = Chr$(34) Then papka = Mid(papka, 2, Len(papka) — 2)

metka:

Selection.WholeStory

With Selection.Font

Name = "Times New Roman"

Size = 12

ColorIndex = wdBlack

End With

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

RightIndent = CentimetersToPoints(0)

SpaceBefore = 0

SpaceAfter = 0

LineSpacingRule = wdLineSpaceSingle

FirstLineIndent = CentimetersToPoints(1.27)

End With

Selection.Find.ClearFormatting

Selection.Find.ParagraphFormat.Alignment = wdAlignParagraphLeft

Selection.Find.Replacement.ClearFormatting

Selection.Find.Replacement.ParagraphFormat.Alignment = wdAlignParagraphJustify

With Selection.Find

Text = ""

Replacement.Text = ""

Forward = True

Wrap = wdFindContinue

Format = True

MatchCase = False

MatchWholeWord = False

MatchWildcards = False

MatchSoundsLike = False

MatchAllWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

ActiveDocument.Save

ActiveDocument.SaveAs FileName:=papka + Left(ActiveDocument.Name, Len(ActiveDocument.Name) — 4), FileFormat:=wdFormatRTF

ActiveWindow.Close

If Documents.Count > 0 Then GoTo metka

signal = MsgBox("Обработка закончена", vbInformation, "Обработка текстов")

End Sub

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6