Vba excel сохранить файл word

Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.

Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:

Sub Test1()

Dim myWord As New Word.Application

Dim myDocument As Word.Document

Set myDocument = myWord.Documents.Add

myWord.Visible = True

End Sub

Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).

Открытие существующего документа

Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:

Sub Test2()

Dim myWord As New Word.Application

Dim myDocument As Word.Document

Set myDocument = _

myWord.Documents.Open(«C:Документ1.docx»)

myWord.Visible = True

End Sub

Замените в этой процедуре строку «C:Документ1.docx» на адрес своего файла.

Подключение к открытому документу

Присвоение переменной ссылки на существующий экземпляр Word.Application осуществляется в VBA Excel с помощью функции GetObject:

Sub Test3()

Dim myWord As Object, myDoc As Word.Document

On Error GoTo Instr

    Set myWord = GetObject(, «Word.Application»)

    Set myDoc = myWord.Documents(«Документ1.docx»)

    myDoc.Range.InsertAfter «Добавляем новый текст, подтверждающий подключение к открытому документу.»

Exit Sub

Instr:

    MsgBox «Произошла ошибка: « & Err.Description

End Sub

Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Также произойдет ошибка, если не будет найден указанный документ (в примере — «Документ1.docx»).

Сохранение и закрытие документа

Сохранение нового документа

Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs2 объекта Document:

myDocument.SaveAs2 («C:Документ2.docx»)

Замените «C:Документ2.docx» на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.

Сохранение изменений в открытом документа

Сохраняйте изменения в существующем документе с помощью метода Document.Save или параметра SaveChanges метода Document.Close:

‘Сохранение изменений документа

myDocument.Save

‘Сохранение изменений документа

‘при закрытии

myDocument.Close ‘по умолчанию True

myDocument.Close True

myDocument.Close wdSaveChanges

‘Закрытие документа без

‘сохранения изменений

myDocument.Close False

myDocument.Close wdDoNotSaveChanges

Закрытие любого сохраненного документа

Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.

ASSEI

0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

1

Excel

18.05.2020, 20:54. Показов 3865. Ответов 25

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Ребята не пойму почему не сохраняется документ в папку:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim objWrdApp As Object
Dim objWrdDoc As Object
Dim F$
Dim iPath$
If Target.Cells.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("A:A"), Target) Is Nothing Then
    On Error Resume Next
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
             Set objWrdDoc = objWrdApp.Documents.Open(App.Path & "МФО.docm")
            objWrdApp.Visible = True
With objWrdDoc
    .Bookmarks("полноеимяорг").Range.Text = CStr(Cells(Selection.Rows.Row, 12).Value)
End With
F$ = App.Path & "Вывод"
    objWrdDoc.SaveAs F$ & CStr(Cells(Selection.Rows.Row, 12).Value) & ".doc"
        objWrdApp.Quit
End If
End If
End Sub



0



2630 / 1636 / 744

Регистрация: 23.03.2015

Сообщений: 5,141

18.05.2020, 21:08

2

ASSEI,

Цитата
Сообщение от ASSEI
Посмотреть сообщение

Selection.Rows.Row

???



0



Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,496

Записей в блоге: 4

18.05.2020, 21:19

3

Цитата
Сообщение от ASSEI
Посмотреть сообщение

On Error Resume Next

для начала закомменте эту строку — она не дает увидеть ошибки



1



0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

18.05.2020, 21:20

 [ТС]

4

да , вроде записывает



0



Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,496

Записей в блоге: 4

18.05.2020, 21:23

5

Цитата
Сообщение от ASSEI
Посмотреть сообщение

Set objWrdDoc = objWrdApp.Documents.Open(App.Path & «МФО.docm»)

добавлять надо через шаблон ….. add(…..dotx/dotm)
открывая документ вы рискуете запороть документ, потеряв закладку



1



ASSEI

0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

18.05.2020, 21:43

 [ТС]

6

у меня ошибку выдает, когда закоментировал

Visual Basic
1
Set objWrdDoc = objWrdApp.Documents.Open(App.Path & "МФО.dotm")

Добавлено через 55 секунд
теперь вообще листа не видно открывается одно приложение

Добавлено через 12 минут
почему при открытии лист пропадает?



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

18.05.2020, 21:50

7

ASSEI, Если не обращать внимание на извращения, которые Вы упрямо копируете из темы в тему, то задайтесь вопросом, откуда в VBA может взяться App.Path ? ибо App это об’ект из «чистого» VB. А если документ находится в той же папке, что и книга, то ThisWorkbook.Path



1



ASSEI

0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

18.05.2020, 22:30

 [ТС]

8

согласен невнимателен, хотел пойти по пути наименьшего сопративления и просто как вы и сказали просто скопировать

Добавлено через 28 минут
вот как то так: или грубовато?

Visual Basic
1
2
3
F$ = ThisWorkbook.Path & "вывод"
    objWrdDoc.SaveAs F$ & CStr(Cells(Selection.Rows.Row, 13).Value) & ".doc"
        objWrdApp.Quit wdDoNotSaveChanges



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

18.05.2020, 22:52

9

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Range("A:A"), Target) Is Nothing Then
       Dim wdApp As Object, wdDoc As Object, iPath$, txt$
       iPath = ThisWorkbook.Path
       Set wdApp = CreateObject("Word.Application")
       Set wdDoc = wdApp.Documents.Open(iPath & "МФО.docm") 'Или
       'Set wdDoc = wdApp.Documents.Add(iPath & "МФО.docm")
       wdApp.Visible = True: txt = CStr(Target(1, 12))
       wdDoc.Bookmarks("ПолноеИмяОрг").Range.Text = txt
       wdDoc.SaveAs iPath & "Вывод" & txt & ".doc", 0 'wdFormatDocument
       wdDoc.Close 0 'wdDocwdDoNotSaveChanges
       wdApp.Quit
    End If
End Sub



1



0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

19.05.2020, 19:56

 [ТС]

10

Ребята подскажите пожалуйста столкнулся с таким моментом что не каждую строку сохраняет в папку ? какие мысли по данному поводу? бывает где то на 500 тых не сохраняет а на 1000-х работает



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.05.2020, 19:59

11

Цитата
Сообщение от ASSEI
Посмотреть сообщение

что не каждую строку сохраняет в папку ?

Цитата
Сообщение от ASSEI
Посмотреть сообщение

If Target.Cells.Count > 1 Then Exit Sub

Что здесь удивительного, Вы сами ограничили выполнения макроса, сейчас только после выделения одной единственной ячейки.



0



Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,496

Записей в блоге: 4

19.05.2020, 20:01

12

Цитата
Сообщение от ASSEI
Посмотреть сообщение

бывает где то на 500 тых не сохраняет а на 1000-х работает

в ворде может быть только 63 столбца, причем надо еще убирать 3,8мм полей
в ексель- тьма, до 16т столбцов



0



0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

19.05.2020, 20:09

 [ТС]

13

ага, не понял но еще поясню, на листе в таблице около 5000 строк,
1. поиском ищу нужное наименование
2. кликаю по ячейке, в столбце «А»,
2. Записываю в ворд найденую строку
3. и так много раз подряд

но получается что некоторые строки записываются в документ НО не сохраняется сам документ в папку т.е.
если закоментировать, строки в коде, сохранения в папку , то видно, что документ ворд формируется и записывается, НО приходится в ручную сохранять



0



0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

19.05.2020, 20:15

 [ТС]

14

посмотрите замысел во вложении, и таких строк в книге около 5000



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.05.2020, 20:15

15

ASSEI, И здесь тоже нет ничего удивительного, ведь имя файла не может содержать некоторые символы. А ячейка может, поэтому, перед сохранением нужно удалять мусор из имени файла.



0



0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

19.05.2020, 20:45

 [ТС]

16

так то все работает, но вот иногда такое бывает,
да вы правы такое то же может быть

Добавлено через 17 минут
посчитал 11300 т строк

Добавлено через 12 минут
ааа да кавычки не пропускает а у меня в файле их полно



0



Модератор

Эксперт MS Access

11341 / 4660 / 748

Регистрация: 07.08.2010

Сообщений: 13,496

Записей в блоге: 4

19.05.2020, 21:08

17

Цитата
Сообщение от ASSEI
Посмотреть сообщение

на листе в таблице около 5000 строк

это примерно 70 страниц — для ворда это много, не каждый комп потянет

Добавлено через 2 минуты

Цитата
Сообщение от ASSEI
Посмотреть сообщение

посчитал 11300 т строк

а это 11300/70=160страниц — тем более, особенно если автоподбор ширины столбцов(из личного опыта)

Добавлено через 2 минуты
выводила больше, но не таблицей, а гладким текстом, даже без табуляторов



0



4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.05.2020, 21:28

18

shanemac51, Что ж Вас так перемкнуло на количестве строк, ведь видно, что одна строка = один документ. А проблема — именно в наличии недопустимых символах в имени файла.



0



ASSEI

0 / 1 / 3

Регистрация: 18.10.2012

Сообщений: 662

19.05.2020, 21:31

 [ТС]

19

Цитата
Сообщение от ASSEI
Посмотреть сообщение

Добавлено через 12 минут
ааа да кавычки не пропускает а у меня в файле их полно

так я и отметил что да проблема именно в символах, но не получается, то пробелов лишних много

Visual Basic
1
2
Dim a As String
a = Replace(CStr(Target(1, 13)), """", "  ", "«»")



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

19.05.2020, 21:37

20

ASSEI, Имя файла это переменная txt, поэтому в строке #11

Visual Basic
1
wdDoc.SaveAs iPath & "Вывод" & newFileName(txt), 0 'wdFormatDocument

и, разумеется, функция, удаляющая весь мусор :

Visual Basic
1
2
3
4
5
6
7
8
Private Function newFileName$(oldFileName$)
    Const trash = "/?:*""""<>|"
    Dim i&
    For i = 1 To 10 'Len(trash)
        oldFileName = Replace(oldFileName, Mid$(trash, i, 1), "")
    Next
    newFileName = oldFileName & ".doc"
End Function



1



Уважаемые форумчане, вынужден обратиться с вопросом следующего характера:
С Вашей же помощью мне удалось из кусочков составить код, который при запуске осуществляет копирование данных с листа Excelи вставляет эти данные на вновь созданный лист Word.

Но мне не удается реализовать заключительный этап своего замысла – мне необходимо вновь созданный файл Word предложить пользователю сохранить в исходной папке (папка где размещается файл Excel) с заготовкой имени файла. При этом команда на сохранение должна отдаваться именно пользователем, а не сохранятся автоматически.

Очень хочу реализовать свой замысел именно следующим образом:
1.       Запуск макроса из книги Excel.
2.       Копирование данных.
3.       Создание листа Word.
4.       Вставка данных на лист Word.
5.       Вызов диалогового окна для сохранения файла с возможностью редактировать имя файла перед его сохранением. Путь сохранения (по умолчанию) должен быть предложен в папку, в которой сохранен Исходный файл Excel. – здесь мне требуется Ваша помощь!!!
6.       После сохранения Пользователем файла завершение работы макроса.

Мне удалось найти решение этой задачи, но только в коде VBA для Word. Перечитал очень много тем, но так и не смог перевести данный код на понятный язык для Excel

Код
Sub MyFileSave() ' если запускать данный код из Word, то он полностью решает мою проблему
Dim sPath As String
 
sPath = ActiveDocument.Path & ""
'sPath = ActiveWorkbook.Path & "" ' для Excel, сэтимвродеудалосьразобраться
 
With Dialogs(wdDialogFileSaveAs) ' а вот здесь при запуске макроса вылетает ошибка.
.Name = sPath & "Переченьработ_" & Left(ActiveDocument.Paragraphs(2).Range.Text, Len(ActiveDocument.Paragraphs(2).Range.Text) - 1)
.Show
End With
End Sub

Очень прошу Вас помочь мне!
Спасибо!

Данная тема близка к моей проблеме

, но использовать под свои нужды не смог, так как в диалоговом окне не возможно выбрать расширение файла, а это мне тоже необходимо.

Пример прилагаю.

Содержание

  1. Метод Document.SaveAs2 (Word)
  2. Синтаксис
  3. Параметры
  4. Возвращаемое значение
  5. Пример
  6. См. также
  7. Поддержка и обратная связь
  8. Работа с объектами документа
  9. Создание нового документа
  10. Открытие документа
  11. Сохранение существующего документа
  12. Сохранение нового документа
  13. Закрытие документов
  14. Активация документа
  15. Определение того, открыт ли документ
  16. Ссылка на активный документ
  17. Поддержка и обратная связь
  18. Метод Documents.Save (Word)
  19. Синтаксис
  20. Параметры
  21. Замечания
  22. Поддержка и обратная связь
  23. Document.SaveAs2 method (Word)
  24. Syntax
  25. Parameters
  26. Return value
  27. Example
  28. See also
  29. Support and feedback

Метод Document.SaveAs2 (Word)

Сохраняет указанный документ с новым именем или форматом. Некоторые аргументы для этого метода соответствуют параметрам в диалоговом окне Сохранить как (вкладка Файл ).

Синтаксис

выражение. SaveAs2 ( _FileName_ , _FileFormat_ , _LockComments_ , _Password_ , _AddToRecentFiles_ , _WritePassword_ , _ReadOnlyRecommended_ , _EmbedTrueTypeFonts_ , _SaveNativePictureFormat_ , _SaveFormsData_ , _SaveAsAOCELetter_ , _Encoding_ , _InsertLineBreaks_ , _AllowSubstitutions_ , _LineEnding_ , _AddBiDiMarks_ , _CompatibilityMode_ )

Выражение Выражение, возвращающее объект Document .

Параметры

Имя Обязательный или необязательный Тип данных Описание
FileName Необязательный Variant Имя документа. По умолчанию используется текущая папка и имя файла. Если документ никогда не сохранялся, используется имя по умолчанию (например, Doc1.doc). Если документ с указанным именем файла уже существует, документ перезаписывается без запроса пользователя.
FileFormat Необязательный Variant Формат, в котором сохраняется документ. Может быть любой константой WdSaveFormat . Чтобы сохранить документ в другом формате, укажите соответствующее значение для свойства SaveFormat объекта FileConverter .
LockComments Необязательный Variant Значение true , чтобы заблокировать документ для комментариев. Значение по умолчанию — false.
Password Необязательный Variant Строка пароля для открытия документа. (См. примечания ниже.)
AddToRecentFiles Необязательный Variant Значение true , чтобы добавить документ в список недавно использовавшихся файлов в меню Файл . По умолчанию используется значение True.
WritePassword Необязательный Variant Строка пароля для сохранения изменений в документе. (См. примечания ниже.)
ReadOnlyRecommended Необязательный Variant Значение true , чтобы microsoft Word предлагал состояние только для чтения при открытии документа. Значение по умолчанию — false.
EmbedTrueTypeFonts Необязательный Variant Значение true , чтобы сохранить шрифты TrueType в документе. Если этот параметр опущен, аргумент EmbedTrueTypeFonts принимает значение свойства EmbedTrueTypeFonts .
SaveNativePictureFormat Необязательный Variant Если графика была импортирована с другой платформы (например, Macintosh), значение True используется для сохранения только версии импортированной графики Microsoft Windows.
SaveFormsData Необязательный Variant Значение true для сохранения данных, введенных пользователем в форме в виде записи.
SaveAsAOCELetter Необязательный Variant Если к документу прикреплен почтовый адрес, значение True , чтобы сохранить документ как письмо AOCE (почтовый ящик сохраняется).
Encoding Необязательный Variant Кодовая страница или кодировка, используемая для документов, сохраненных в виде закодированных текстовых файлов. По умолчанию используется системная кодовая страница. С этим параметром нельзя использовать все константы MsoEncoding .
InsertLineBreaks Необязательный Variant Если документ сохраняется как текстовый файл, значение True для вставки разрывов строк в конце каждой строки текста.
AllowSubstitutions Необязательный Variant Если документ сохраняется в виде текстового файла, значение True позволяет Word заменить некоторые символы текстом, похожим на текст. Например, если символ авторских прав отображается как (c). Значение по умолчанию — false.
LineEnding Необязательный Variant Способ, который Word помечает строки и разрывы абзаца в документах, сохраненных в виде текстовых файлов. Может быть одной из следующих констант WdLineEndingType : wdCRLF (по умолчанию) или wdCROnly.
AddBiDiMarks Необязательный Variant True добавляет управляющие символы в выходной файл, чтобы сохранить двунаправленный макет текста в исходном документе.
CompatibilityMode Необязательный Variant Режим совместимости, который Word использует при открытии документа. Константа WdCompatibilityMode .

Важно!
По умолчанию, если для этого параметра не указано значение, Word вводит значение 0, указывающее, что текущий режим совместимости документа должен быть сохранен.

Возвращаемое значение

Пример

В следующем примере кода активный документ сохраняется как Test.rtf в формате RTF.

В следующем примере кода активный документ сохраняется в текстовом формате с расширением «.txt».

В следующем примере кода выполняется цикл по всем установленным преобразователям, и если он находит преобразователь WordPerfect 6.0, он сохраняет активный документ с помощью преобразователя.

В следующем примере кода показана процедура, которая сохраняет документ с паролем.

См. также

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Работа с объектами документа

В Visual Basic методы изменения файлов являются методами объекта Document или коллекции Documents . В этом разделе приведены примеры Visual Basic, связанные с задачами, определенными в следующих разделах.

Создание нового документа

Коллекция Documents включает все открытые документы. Чтобы создать документ, используйте метод Add , чтобы добавить объект Document в коллекцию Documents . Следующая инструкция создает документ.

Лучший способ создания документа — назначить возвращаемое значение переменной объекта. Метод Add возвращает объект Document , который ссылается на новый документ. В следующем примере объект Document , возвращенный методом Add , назначается переменной объекта . Затем задаются несколько свойств и методов объекта Document . Вы можете легко управлять новым документом с помощью объектной переменной.

Открытие документа

Чтобы открыть существующий документ, используйте метод Open с коллекцией Documents . Следующая инструкция открывает документ с именем Sample.doc, расположенный в папке MyFolder.

Сохранение существующего документа

Чтобы сохранить один документ, используйте метод Save с объектом Document . Следующая инструкция сохраняет документ с именем Sales.doc.

Вы можете сохранить все открытые документы, применив метод Save к коллекции Documents . Следующая инструкция сохраняет все открытые документы.

Сохранение нового документа

Чтобы сохранить один документ, используйте метод SaveAs2 с объектом Document . Следующая инструкция сохраняет активный документ как «Temp.doc» в текущей папке.

Аргумент FileName может включать только имя файла или полный путь (например, «C:DocumentsTemporary File.doc»).

Закрытие документов

Чтобы закрыть один документ, используйте метод Close с объектом Document . Следующая инструкция закрывает и сохраняет документ с именем Sales.doc.

Вы можете закрыть все открытые документы, применив метод Close коллекции Documents . Следующая инструкция закрывает все документы без сохранения изменений.

В следующем примере пользователю предлагается сохранить каждый документ перед закрытием документа.

Активация документа

Чтобы изменить активный документ, используйте метод Activate с объектом Document . Следующая инструкция активирует открытый документ с именем Sales.doc.

Определение того, открыт ли документ

Чтобы определить, открыт ли документ, можно перечислить коллекцию Documents с помощью параметра For Each. Следующая инструкция. В следующем примере документ с именем Sample.doc активируется, если документ открыт, или открывается Sample.doc, если он в настоящее время не открыт.

Ссылка на активный документ

Вместо ссылки на документ по имени или по номеру индекса, например, Documents(«Sales.doc») свойство ActiveDocument возвращает объект Document , ссылающийся на активный документ (документ с фокусом). В следующем примере отображается имя активного документа или, если документы не открыты, отображается сообщение.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Метод Documents.Save (Word)

Сохраняет все документы в коллекции Документы .

Синтаксис

expression. Сохранить (NoPrompt, OriginalFormat)

выражение (обязательно). Переменная, представляющая объект Documents .

Параметры

Имя Обязательный или необязательный Тип данных Описание
NoPrompt Необязательный Variant True , чтобы Word автоматически сохранял все документы. Значение false , чтобы приложение Word запрашивало у пользователя запрос на сохранение каждого документа, измененного с момента последнего сохранения.
OriginalFormat Необязательный Variant Указывает способ сохранения документов. Может быть одной из констант WdOriginalFormat .

Замечания

Если документ не был сохранен ранее, в диалоговом окне Сохранить как пользователю будет предложено ввести имя файла.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Document.SaveAs2 method (Word)

Saves the specified document with a new name or format. Some of the arguments for this method correspond to the options in the Save As dialog box (File tab).

Syntax

expression. SaveAs2 ( _FileName_ , _FileFormat_ , _LockComments_ , _Password_ , _AddToRecentFiles_ , _WritePassword_ , _ReadOnlyRecommended_ , _EmbedTrueTypeFonts_ , _SaveNativePictureFormat_ , _SaveFormsData_ , _SaveAsAOCELetter_ , _Encoding_ , _InsertLineBreaks_ , _AllowSubstitutions_ , _LineEnding_ , _AddBiDiMarks_ , _CompatibilityMode_ )

expression An expression that returns a Document object.

Parameters

Name Required/Optional Data type Description
FileName Optional Variant The name for the document. The default is the current folder and file name. If the document has never been saved, the default name is used (for example, Doc1.doc). If a document with the specified file name already exists, the document is overwritten without prompting the user.
FileFormat Optional Variant The format in which the document is saved. Can be any WdSaveFormat constant. To save a document in another format, specify the appropriate value for the SaveFormat property of the FileConverter object.
LockComments Optional Variant True to lock the document for comments. The default is False.
Password Optional Variant A password string for opening the document. (See Remarks below.)
AddToRecentFiles Optional Variant True to add the document to the list of recently used files on the File menu. The default is True.
WritePassword Optional Variant A password string for saving changes to the document. (See Remarks below.)
ReadOnlyRecommended Optional Variant True to have Microsoft Word suggest read-only status whenever the document is opened. The default is False.
EmbedTrueTypeFonts Optional Variant True to save TrueType fonts with the document. If omitted, the EmbedTrueTypeFonts argument assumes the value of the EmbedTrueTypeFonts property.
SaveNativePictureFormat Optional Variant If graphics were imported from another platform (for example, Macintosh), True to save only the Microsoft Windows version of the imported graphics.
SaveFormsData Optional Variant True to save the data entered by a user in a form as a record.
SaveAsAOCELetter Optional Variant If the document has an attached mailer, True to save the document as an AOCE letter (the mailer is saved).
Encoding Optional Variant The code page, or character set, to use for documents saved as encoded text files. The default is the system code page. You cannot use all MsoEncoding constants with this parameter.
InsertLineBreaks Optional Variant If the document is saved as a text file, True to insert line breaks at the end of each line of text.
AllowSubstitutions Optional Variant If the document is saved as a text file, True allows Word to replace some symbols with text that looks similar. For example, displaying the copyright symbol as (c). The default is False.
LineEnding Optional Variant The way Word marks the line and paragraph breaks in documents saved as text files. Can be one of the following WdLineEndingType constants: wdCRLF (default) or wdCROnly.
AddBiDiMarks Optional Variant True adds control characters to the output file to preserve bi-directional layout of the text in the original document.
CompatibilityMode Optional Variant The compatibility mode that Word uses when opening the document. WdCompatibilityMode constant.

Important
By default, if no value is specified for this parameter, Word enters a value of 0, which specifies that the current compatibility mode of the document should be retained.

Return value

Example

The following code example saves the active document as Test.rtf in rich-text format (RTF).

The following code example saves the active document in text-file format with the extension «.txt».

The following code example loops through all the installed converters, and if it finds the WordPerfect 6.0 converter, it saves the active document using the converter.

The following code example shows a procedure that saves a document with a password.

See also

Support and feedback

Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Источник

Using Excel VBA to read and write Microsoft Word documents

These examples are written and tested in Excel 2003.

Create, Write and Close Word Document
Read and Append

Create, Write and Close Word Document

The following code illustrates the use of Excel VBA to create a Microsoft Word Document and save it to disk.
This script will create a document in your My Documents folder.

'In Tools > References, add reference to &quot;Microsoft Word XX.X Object Library&quot; before running.
Option Explicit

Sub CreateNewWordDoc()
    
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Set wdApp = CreateObject("Word.Application")
    Dim myFile As String
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Dim wdDoc As Object
    'Set wdApp = CreateObject("word.Application")
        
    wdApp.Visible = True
    Set wdDoc = wdApp.Documents.Add
    
    ' define a place to put file
    myFile = Environ("UserProfile") & "My Documents" & "MyWordDoc.docx"
    
    ' or like this
    myFile = Environ("UserProfile") & "Documents" & "MyWordDoc.docx"

    ' have to wrap name in quotes here because directory contains a space
    If Dir("""&myFile&""") <> "" Then
        ' kill = delete existing file
        Kill """&myFile&"""
    End If

    With wdDoc
        .Content.InsertAfter "Hello World"
        .Content.InsertParagraphAfter
        .SaveAs myFile
        .Close
    End With
    
    wdApp.Quit
    Set wdDoc = Nothing
    Set wdApp = Nothing

End Sub


Some VBA Vocabulary

Option Explicit
When Option Explicit On or Option Explicit appears in a file, you must explicitly declare all variables by using the Dim or ReDim statements. If you try to use an undeclared variable name, an error occurs at compile time. The Option Explicit Off statement allows implicit declaration of variables. This statement
reduces risk of error by mis-typing variable names.

Word.Application
Represents the Microsoft Word application. The Application object includes properties and methods that return top-level objects.
To use Automation to control Word from another application, use the Microsoft Visual Basic CreateObject or GetObject function to return a Word Application object.

Word.Document
Represents a Word document. The Document object is a member of the Documents collection. The Documents collection contains all the Document objects that are currently open in Word.

InsertAfter
Inserts the specified text at the end of a range or selection. After this method is applied, the range or selection expands to include the new text.

Kill Deletes files from a disk.

DirThe Microsoft Excel DIR function returns the first filename that matches the pathname and attributes specified. To retrieve additional filenames that match pathname and attributes, call DIR again with no arguments.

Early and Late Binding

An object is early bound when it is assigned to a variable declared to be of a specific object type. By contrast, an object is late bound when it is assigned to a variable declared to be of type Object. Objects of this type can hold references to any object, but lack many of the advantages of early-bound objects

Early binding: The first step in using early binding is to ensure that the compiler «knows» about the object to which you want to bind. If you are working with a Excel or Word, then the controls in the toolbox are all known, or intrinsic, objects, and you can create references to them without any concern.

Late Binding: With late binding, the code does not make an explicit reference to the type of object when the variable is declared. Instead, it will simply use the «Object» type.

Read and Append to a Microsoft Word Document

The following code illustrates the use of Excel VBA to read and appaend to a Microsoft Word Document.
This script will trad a document in your My Documents folder.

'In Tools > References, add reference to "Microsoft Word XX.X Object Library" before running.
Option Explicit

Sub CreateNewWordDoc()
    
    Dim wdApp As Word.Application
    Dim wdDoc As Word.Document
    Set wdApp = CreateObject("Word.Application")
    Dim myFile As String
    
    'Alternatively, we can use Late Binding
    'Dim wdApp As Object
    'Dim wdDoc As Object
    'Set wdApp = CreateObject("word.Application")
    
    myFile = Environ("UserProfile") & "/My Documents/" & "MyWordDoc.docx"
    Set wdDoc = wdApp.Documents.Open(myFile)
    wdApp.Visible = True
    
    With wdDoc
        
        .Content.InsertAfter "Hello World"
        .Content.InsertParagraphAfter

    End With
    
End Sub

Понравилась статья? Поделить с друзьями:
  • Vba excel сохранить один лист в файл
  • Vba excel сохранить лист в word
  • Vba excel сохранить копию книги
  • Vba excel сохранить книгу как без подтверждения
  • Vba excel сохранить как копию