Задание. Загрузка текста MS DOS и предоставление его пользователю для редактирования, форматирования и сохранения в качестве шаблона.
Макрос отображает диалог для выбора txt-файла, макрос открывает выбранный файл и сохраняет его как dotm-файл.
Файл сохраняется по тому же пути, где находится выбранный txt-файл.
Макрос
Sub Макрос()
Dim doc As Document
Dim FN As String, path As String
'1. Юзер выбирает файл. Полное имя файла (путь + имя) запишется в переменную 'FN'.
With Application.FileDialog(msoFileDialogFilePicker)
' Чтобы юзер мог выбрать только один файл, а не несколько.
.AllowMultiSelect = False
' Текст для кнопки.
.ButtonName = "OK"
' Сброс фильтра от предыдущего запуска макроса.
' Фильтр позволяет отображать в диалоге не все форматы файлов, а несколько,
' чтобы юзеру было удобнее найти нужный файл.
.Filters.Clear
' Настраиваем фильтр, чтобы в диалоге отображались только файлы, у которых расширение 'txt'.
.Filters.Add Description:="Текстовые файлы", Extensions:="*.txt"
' Поясняющий текст для юзера в заголовке диалога.
.Title = "Выберите текстовый файл."
' Отображение диалога
.Show
' Если юзер не выбрал файл, выход из процедуры и таким образом макрос завершит работу.
If .SelectedItems.Count = 0 Then
Exit Sub
End If
' Запись в переменную 'FN' полного имени выбранного файла.
FN = .SelectedItems(1)
End With
'2. Открытие выбранного файла. Макрос откроет текстовый файл в программе 'Word'.
' Открытому файлу присваиваем имя 'doc'. Далее в коде будем обращаться к файлу по имени 'doc'.
' ConfirmConversions:=False - чтобы не отображался диалог для выбора формата файла.
' Format:=wdOpenFormatAuto - чтобы ворд сам определил, какой формат у открываемого файла.
' Encoding:=866 - означает, что открывается текстовый файл, у которого кодировка 'MS-DOS'.
Set doc = Documents.Open(FileName:=FN, ConfirmConversions:=False, Format:=wdOpenFormatAuto, Encoding:=866)
'3. Сохранение файла в формате 'dotm'.
' Извлечение пути, где находится выбранный файл. По этому же пути сохраним и новый файл.
path = Left(FN, InStrRev(FN, Application.PathSeparator))
' CompatibilityMode:=wdCurrent - чтобы файл имел возможности последней версии ворда.
doc.SaveAs2 FileName:=path & "Шаблон.dotm", FileFormat:=wdFormatXMLTemplateMacroEnabled, _
CompatibilityMode:=wdCurrent
End Sub
Я сделала два макроса.
Первый макрос (Op) загружает текстовый файл в программу 'Word'.
Второй макрос (Макрос) сохраняет активный файл в формате 'docx'. Этот формат не является шаблоном, шаблоном является формат 'dotm'. Но мне так и надо.
Sub Op()
Set dlg = Dialogs(wdDialogFileOpen)
aButton = dlg.Display
fSelected = dlg.Name
If aButton = -1 Then
Set MyDoc = Documents.Open(fSelected)
End If
End Sub
Sub Макрос()
Dim FN As String
FN = Left(ActiveDocument.Name, InStrRev(ActiveDocument.Name, ".") - 1)
FN = FN & " (копия)" & ".docx"
FN = ActiveDocument.Path & "\" & FN
ActiveDocument.SaveAs2 FileName:=FN, FileFormat:=wdFormatXMLDocument
End Sub