Тайны и секреты компьютера
Шрифт:
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» (папка, куда скопируется файл,
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
Весь приведенный выше подробный разбор написания первой макрокоманды, возможно, кому-то показавшийся излишне подробным, помещен здесь исключительно для того, чтобы читающий эти строки мог представить себе ход рассуждений и мыслей, необходимый для создания макрокоманд, и тем самым освоить некоторые приемы анализа программного кода и самостоятельного обучения программированию на VBA. Ведь книга рассчитана не на профессиональных программистов, которые, без сомнения, знают эти приемы, а скорее на тех, кто ранее вообще не имел представления об этой отрасли человеческой деятельности.
А эти приемы таковы:
1. Для самого первого начала работы, а также для выяснения, какая команда соответствует тому или иному преобразованию текста или другому действию пользователя Word, необходимо широко использовать основное отличие редактора VBA от редакторов других языков программирования — средство записи макросов. Наличие средства записи макросов позволяет быстро и легко создать свою первую программу и начать ее изучать, а также может оказать серьезную помощь, когда необходимо «перевести» на язык VBA какое-либо действие пользователя Word.
2. Для грамотного написания кода, выяснения возможных продолжений каждой команды следует широко использовать контекстную подсказку VBA, которая появляется при наборе точки или скобки после уже написанной части команды.
3. Справка VBA — основной источник знаний по этому языку! Она построена по контекстному принципу — при вызове справки клавишей F1 отображается справка по той команде, на которой стоит в это время курсор. Таким образом можно быстро и легко изучить назначение, синтаксис и особенности каждой команды — стоит только набрать ее и вызвать справку. К сожалению, многие разделы справки не переведены на русский язык, поэтому англо-русский словарь (или система машинного перевода) может стать вашим спутником на время освоения VBA. Путешествия по справке и чтение различных ее разделов, даже не относящихся к непосредственно выполняемой задаче, обогатит Ваши знания по программированию в Word и не только…
4. Примеры справки VBA — работа, сделанная за вас! Копируйте фрагменты кода из примеров себе в программу и модифицируйте их так, как вам надо.
5. Для тестирования и отладки небольшого фрагмента кода или даже одной команды вынесите ее временно в отдельный модуль — проще будет работать.
В принципе, этих приемов хватит, чтобы начать полноценно изучать VBA. Ну, а дальнейшее зависит уже от вашего разума, логики, сообразительности и наблюдательности.
Visual Basic for Applications, пожалуй, на настоящее время единственный язык, который можно изучить абсолютно самостоятельно, без каких-либо дополнительных книг или текстов программ, достаточно лишь иметь "научный взгляд на мир", то есть способность наблюдать, экспериментировать и делать выводы. Даже эти главы имеют цель не столько научить вас программировать на VBA, сколько помочь вам начать учиться, чтобы вы не тратили множество времени на поиск и получение информации о не совсем очевидных вещах. Ведь, согласитесь, совсем неплохо облегчить вам начало работы и знакомство с возможностями редактора, немного проиллюстрировав процесс программирования.
Автогонки в Excel 2000
Если в программе Microsoft Excel 97 имеется встроенная игра-"леталка", то в следующей версии этой программы работы с электронными таблицами присутствуют даже настоящие автогонки! Так что не стоит удивляться большим размерам программ от Microsoft, — каждая из таких программ умеет многое, в том числе и играть.
Автогонки из Excel 2000