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

ЖАНРЫ

Интернет-журнал "Домашняя лаборатория", 2007 №7
Шрифт:

Рис. 5.33. Справка по инструкции Goto в Microsoft OfficeXP.

Выбрав из перечня разделов, содержащих данное ключевое слово, раздел GoTo Statement, можно получить всю ту информацию, которая была приведена на рис. 5.32.)

Итак, поставим метку в начало нашей программы:

Sub Макрос1

' Макрос1 Макрос

' Макрос записан 27.01.00

'

metka:

Selection.WholeStory

With Selection.Font

Name = "Times New Roman"

……

а

в ее конец — инструкцию "Goto":

……

ActiveDocument.SaveAs Filename:= Left (ActiveDocument. FullName,

Len (ActiveDocument. FullName) -4), FileFormat:=*dFormatRTFActiveKindov. Close

Goto metka

End Sub

(Не стоит поддаваться мнению, что "использование оператора Goto — дурной тон". Это не так. Каждый оператор выполняет свою функцию, и если какая-либо проблема может быть лучше всего решена применением именно этого оператора, то его и надо использовать. Дурной тон — делать сложно там, где можно сделать просто.)

Готово. Теперь наша программа обработает все открытые документы. Но… обработать-то обработала, но в конце выдала сообщение об ошибке. Можно, конечно, оставить и так, но программа, заканчивающая свою работу ошибкой, пусть и после выполнения всех необходимых действий, выглядит некрасиво. Поэтому нужно обеспечить остановку выполнения программы после того, как будут обработаны все документы. Итак, алгоритм действий программы должен быть таков:

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

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

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

"Если" — по-английски "If". Поищем по этому слову в Предметном указателе Справочной системы по VBA (из Microsoft Office 97). Получаем строчку:

"Инструкция If", выбрав которую, получаем окно из различных сочетаний слов If, Then, Else и др. (рис. 5.34).

Рис. 5.34. Выберем нужную справку…

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

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

(К сожалению, в Справочной системе по VBA из Microsoft Office 2000/ХР подобный поиск произвести не представляется возможным — на слово "If" ни Предметный указатель, ни Мастер ответов не реагируют. Подобные ситуации встречаются в этой Справочной системе нередко — вот почему для начального обучения программированию на Visual Basic for Applications я рекомендую использовать именно Microsoft Office 97, несмотря на то, что эта версия офисного пакета считается несколько устаревшей.)

Какое же условие должно быть у нас? Наверное, подсчет количества открытых документов — если не 0, то продолжать работу, а если 0, то остановиться. А как можно подсчитать количество открытых документов? Посмотрим, нет ли в Visual Basic for Applications команды для такого подсчета? Напишем в тексте программы: "Documents", поставим точку и просмотрим выпавший список (рис. 5.35).

Рис. 5.35. Как

же подсчитать открытые документы?

Есть ли что-нибудь, что может пригодиться?

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

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

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

Ну, вот и все. Итак, наша программа теперь выглядит так:

Sub Макрос1

'

' Макрос1 Макрос

' Макрос записан 13.01.02 metka:

'

Selection.WholeStory

With Selection.Font

Name = "Times New Roman"

Size = 12

Colorlndex = wdBlack

End With

With Selection.ParagraphFormat

LeftIndent = CentimetersToPoints(0)

Rightlndent = 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

MatchAHWordForms = False

End With

Selection.Find.Execute Replace:=wdReplaceAll

ActiveDocument.Save

ActiveDocument.SaveAs FileName:= Left (ActiveDocument.FullName, Len(ActiveDocument.FullName) -4), FileFormat:=wdFormatRTFActiveWindow.Close

ActiveWindow.Close

If Documents.Count > 0 Then GoTo metka

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

End Sub

Итак, программа готова. Можно с помощью диалогового окна "Настройка"

назначить ей кнопку, пункт меню или сочетание клавиш, и запускать ее при необходимости.

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

Опять воспользуемся Справкой.

В Предметном указателе Справочной системы по VBA из Microsoft Office 97 зададим слова "dialog boxes", выберем эту же строчку из списка тем (рис. 5.36).

Поделиться с друзьями: