Запустив эту программу несколько раз, получаем, что в переменную "papka" записывается путь и имя папки, но, если в пути или имени были пробелы, то путь окаймляется кавычками: "C: \Program Files\Microsoft Office\Шaблoны\", а если пробелов в пути не было, то кавычки по краям не ставятся. Поэтому возвращаемую переменную нужно обработать — убрать кавычки.
Сделать это можно с помощью уже известных нам команд "Left", "Right", "Mid" и "Len":
If Right (papka, 1) = Chr$ (34) Then papka = Mid (papka, 2, Len (papka) — 2)
"Chr$(34)" — это команда, которая возвращает символ с ASCII-кодом 34: кавычку. (Каждый символ в Word имеет свой номер — ASCII-код, по которому его можно вызвать на экран. Узнать код выделенного символа можно командой "MsgBox Asc(Selection.Text)". Узнать о командах "Chr$" и "Asc" можно, поискав информацию в Справочной системе.)
Кроме того, не мешало бы сделать так, чтобы при запуске программы окно "Копирование файла" по умолчанию стояло бы на директории с активным документом — не всегда же нужно сохранять все обрабатываемые документы в отдельной папке! Нет ничего проще — установим параметр "Directory" как
"ActiveDocument.Path" перед командой".Display":
With Dialogs (wdDialogCopyFHe)
Directory = ActiveDocument.Path
Display
papka =.Directory
End With
If Right (papka, 1) = Chr$ (34) Then papka = Mid (papka, 2, Len (papka) — 2)
Это и есть необходимый код для отображения диалогового окна и получения пути к папке для сохранения обработанных документов.
Наконец, сделаем так, чтобы нажатие кнопки "Отмена" в диалоговом окне приводило бы не к простому продолжению работы программы, а к выходу из нее. Для этого в справке по слову".Display" узнаем, что эта команда является функцией — то есть возвращает определенное значение, в зависимости от того, какая кнопка была нажата (рис. 5.41).
Рис. 5.41.
Добавим в программу условие и команду выхода из программы — он должен произойти, если в диалоговом окне нажата кнопка "Отмена" (тогда функция. Display вернет в программу значение "0"):
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)
Теперь при нажатии кнопки "Отмена" в диалоговом окне выбора папки произойдет выход из программы.
Необходимо вставить этот код в нашу программу. Довольно ясно, что данный код должен располагаться в ее начале, — чтобы можно было задать папку для сохранения файлов и, запустив автоматическую их конвертацию, уйти от компьютера и заняться другими делами. Кроме того, следует несколько модифицировать команду сохранения документа, заменив путь к файлу переменной "papka" (вернувшись к предыдущей версии этой команды — без использования свойства. FullName). В итоге она будет выглядеть так:
…
ActiveDocument.SaveAs FileName:=рарка + Left (ActiveDocument.Name, Len(ActiveDocument.Name) -4), FileFormat:=wdFormatRTF
…
И вот, наконец, можно привести окончательный вид нашего макроса со всеми внесенными в него доработками:
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
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
M tchAllWordForms = 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 ("Обработка закончена", vblnformation, "Обработка текстов")
End Sub
* * *