Documents add word vba

Создание нового документа 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.

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Documents.Add method (Word)

vbawd10.chm158072846

vbawd10.chm158072846

word

Word.Documents.Add

04b81417-cde9-4657-7737-90d266d05487

06/08/2017

medium

Documents.Add method (Word)

Returns a Document object that represents a new, empty document added to the collection of open documents.

Syntax

expression.Add (Template, NewTemplate, DocumentType, Visible)

expression Required. A variable that represents a Documents object.

Parameters

Name Required/Optional Data type Description
Template Optional Variant The name of the template to be used for the new document. If this argument is omitted, the Normal template is used.
NewTemplate Optional Variant True to open the document as a template. The default value is False.
DocumentType Optional Variant Can be one of the following WdNewDocumentType constants: wdNewBlankDocument, wdNewEmailMessage, wdNewFrameset, or wdNewWebPage. The default constant is wdNewBlankDocument.
Visible Optional Variant True to open the document in a visible window. If this value is False, Microsoft Word opens the document but sets the Visible property of the document window to False. The default value is True.

Return value

Document

Example

This example creates a new document based on the Normal template.

This example creates a new document based on the Professional Memo template.

Documents.Add Template:="C:Program FilesMicrosoft Office" _ 
 & "TemplatesMemosProfessional Memo.dot"

This example creates and opens a new template, using the template attached to the active document as a model.

tmpName = ActiveDocument.AttachedTemplate.FullName 
Documents.Add Template:=tmpName, NewTemplate:=True

[!includeSupport and feedback]

Аннотация: Лекция посвящена описанию коллекции Documents и объекта Document приложения Microsoft Word.

10.1. Коллекция Documents — открытые документы

Коллекция Documents включает в себя открытые документы с их полезными методами и свойствами. Наряду с объектами Document, которые входят в коллекцию, здесь мы подробнее рассмотрим уже известный вам объект ActiveDocument,

ActiveDocument имеет те же свойства и методы, что и любой Documentобъект, однако, часто объектом ActiveDocument удобнее пользоваться.

Так же обратите внимание на объект ThisDocument. Он представляет собой тот документ, из которого запущен макрос.

Для начала давайте рассмотрим свойства и методы коллекции, а потом займемся объектом Document.

10.2. Методы коллекции Documents

10.2.1. Add — создаем новый документ

Этот метод добавляет новый объект Document в коллекцию Documents — то есть создает новый документ. Его можно использовать так (листинг 10.1.):

Documents.Add


Листинг
10.1.
Создаем новый документ

При выполнении такого кода будет создан новый пустой документ на основе шаблона Normal. Чтобы ссылка на созданный документ была присвоена переменной, можете воспользоваться такой конструкцией (листинг 10.2.):

Dim obj_NewDoc As Word.Document
    Set obj_NewDoc = Application.Documents.Add


Листинг
10.2.
Создаем новый документ и присваиваем ссылку на него объектной переменной

Здесь мы сначала объявили переменную соответствующего типа, а потом присвоили ей ссылку на новый документ.

Метод Add может принимать несколько необязательных параметров. Полный вызов метода выглядит так:

Documents.Add (Template, NewTemplate, DocumentType, Visible)

Template (Шаблон) — отвечает за шаблон, который будет использован при создании файла. По умолчанию это Normal.dotm.

NewTemplate (Новый шаблон) — если этот параметр установлен в True — файл будет обрабатываться как шаблон. По умолчанию установлен в False.

DocumentType (Тип документа) — очень полезный параметр, который позволяет создавать документы различных типов. На тип документа указывает одна из констант, в частности, по умолчанию это wdNewBlankDocument — то есть пустой документ. Так же этот параметр может принимать значения wdNewEmailMessage (Почтовое сообщение), wdNewFrameset (Документ с рамками — такие используются при создании WEB-страниц), wdNewWebPage (WEB-страница).

Visible (Видимость) — по умолчанию установлен в True — то есть создаваемый документ видим для пользователя. Если вы хотите, сначала сформировать новый документ, а уже потом показать его пользователю — установите это свойство в False, а после окончания формирования документа — воспользуйтесь свойством Visible созданного документа, чтобы отобразить его.

10.2.2. Open — открываем документы

Метод Open используется для открытия существующих файлов, возвращая объект типа Document. Файл, имя которого задано при вызове метода, открывается и добавляется в коллекцию Documents. Метод может принимать множество параметров, однако основной — это FileName, который и задает имя открываемого файла.

Например, для открытия файла 1.docm, расположенного в корневом каталоги диска С, можно воспользоваться кодом из листинга 10.3.

Documents.Open FileName:="C:1.docm"


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

10.2.3. Close — закрываем все документы

Метод Close используется для закрытия всех открытых документов. Применяют его достаточно редко — удобнее закрывать каждый конкретный документ по отдельности. При вызове метода без параметров система задаст вопрос о сохранении документов, которые были изменены (листинг 10.4.).

Documents.Close


Листинг
10.4.
Закрываем все документы

Полный вызов метода выглядит так:

Documents.Close(SaveChanges, OriginalFormat, RouteDocument)

Среди параметров для нас наибольший интерес представляют первых два.

SaveChanges (Сохранить изменения) отвечает за сохранение изменений. По умолчанию он установлен в wdPromptToSaveChanges (Вывести запрос о сохранении), так же он может быть установлен в wdDoNotSaveChanges (Не сохранять изменения) и wdSaveChanges (Сохранить изменения). Как видите, с помощью параметра wdSaveChanges можно организовать удобное и быстрое закрытие множества документов с сохранением изменений

OriginalFormat (Формат) — отвечает за формат сохраняемого документа. Может принимать различные значения: wdOriginalDocumentFormat (Оригинальный формат документа), wdPromptUser (Запросить формат у пользователя), wdWordDocument (Документ Word).

Вот как выглядит вызов метода Close, который сохраняет все открытые документы и закрывает их (листинг 10.5.)

Documents.Close (wdSaveChanges)


Листинг
10.5.
Закрываем все документы, предварительно сохранив

Учтите — если какие-то из документов сохраняются в первый раз — вы получите запрос об имени документа.

10.2.4. Item — обращаемся к отдельным документам

10-01-Item.docm — пример к п. 10.2.4.

Метод Item позволяет обращаться к открытым документам (то есть — к объектам Document ), используя их индексы или имена. Нумерация документов начинается с единицы. Чтобы узнать общее количество открытых документов, можно воспользоваться свойством Documents.Count.

Например, с помощью нижеприведенного кода из листинга 10.6 мы поочередно выводим имена открытых документов с указанием номера документа в коллекции:

For i = 1 To Documents.Count
    MsgBox (Documents.Item(i).Name & _
    " - документ номер " & i)
Next i


Листинг
10.6.
Выводим имена и номера документов

Очевидно, что свойство Count коллекции Documents позволяет узнать количество открытых документов, а свойство Name объекта Item(i) содержит имя документа с индексом i.

На рис. 10.1 вы можете видеть одно из окон с сообщением об имени и номере документа.

Окно сообщения об имени и номере документа

Рис.
10.1.
Окно сообщения об имени и номере документа

К документам в коллекции Documents можно обращаться и по именам. Также, при обращении к документу необязательно напрямую указывать метод Item — в листинге 10.7 вы можете видеть различные варианты обращения к документу.

MsgBox Documents("Мой документ.docx").Name
   MsgBox Documents.Item("Мой документ.docx").Name
   MsgBox Documents(1).Name


Листинг
10.7.
Выводим имена и номера документов

10.2.5. Save — сохранение всех документов

Метод Save сохраняет все документы коллекции. Если документ сохраняется впервые — будет выведено окно с запросом имени файла. В листинге 10.8 приведен пример вызова метода.

Documents.Save


Листинг
10.8.
Сохраним все документы в коллекции

10.3. Свойства коллекции Documents

Среди свойств коллекции Documents нас будет интересовать лишь одно — Count. Это свойство позволяет узнать количество элементов в коллекции Documents, то есть — количество открытых документов. В листинге 10.9 мы выводим в окне сообщения количество открытых документов

MsgBox ("Количество открытых документов: " & _
    Documents.Count)


Листинг
10.9.
Сохраним все открытые документы

10.4. Объект Document

Объект Document — это открытый документ. У него есть множество свойств и методов, которые активно используются при программной работе с документами. Здесь мы рассмотрим важнейшие из них.

Наконец то я смогу написать статью с примерами. Дело в том, что ключевым компонентом объектной модели Word является не сам объект Word.Application, а коллекция Documents, так как именно она предоставляет два ключевых метода – для создания и открытия документа Word. Конечно, у коллекции Word Documents есть и другие методы и свойства, но они не столь важны. И поэтому, мы рассмотрим только самые основные.

Сама по себе коллекция Documents хранит в себе набор всех объектов Document, которые в свою очередь позволяют работать с каждым экземпляром документа в отдельности. Я буду приводить примеры как в самом редакторе VBA, как и с помощью сценариев Windows Scrip Host.

Единственно свойство, которое позволяет узнать общее количество элементов коллекции является Count:

Count – содержит количество открытых в данный момент документов.

Для примера, откройте несколько word документов и в редакторе VBA пропишите следующий код (просто создайте новый модуль):

For Each objDoc In Documents
    DocName = DocName & objDoc.Name & vbCrLf
Next
MsgBox DocName
 
DocName = ""
 
For j = 1 To Documents.Count
    DocName = DocName & Documents.Item(j).Name & vbCrLf
Next
 
MsgBox DocName

В данном случае мы использовали два способа бля работы с коллекцией:

  • Использовали цикл for each для обработки коллекции
  • Использовали свойство count для определения количества элементов в коллекции Documents.

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

Однако, если мы попробуем проделать аналогичный фокус в сценарии Windows script Host, то никакого результата не получим:

' -----------------------------------------------------
' Получение имени открытых документов
' documents-count.vbs
' -----------------------------------------------------
Option Explicit
 
dim objWord, objDoc, oDoc, DocName
 
Set objWord = CreateObject("Word.Application")
Set objDoc = objWord.Documents
 
For Each oDoc In objDoc
    DocName = DocName & oDoc.Name & vbCrLf
Next
 
MsgBox DocName
objWord.Quit
// ------------------------------------------------
// Получение имени открытых документов
// documents-count.js
// ------------------------------------------------
 
var objWord, objDoc, oDoc, DocName;
 
objWord = WScript.CreateObject("Word.Application");
objDoc = new Enumerator(objWord.Documents);
 
for (; !objDoc.atEnd(); objDoc.moveNext()){
    DocName += objDoc.item().Name+ "n";
}
 
WScript.Echo(DocName);
objWord.Quit();

Видимо из внешнего сценария мы можем обработать только ту коллекцию, которую создали тут же.

Методы коллекции Word Documents

Хорошо, теперь давайте рассмотрим некоторые методы коллекции Word Documents, один из методов мы уже использовали выше (Item).

Add(Template, NewTemplate, DocumentType, Visible) – отвечает за создание нового документа, который сразу же открывается, можно выполнить метод без параметров. Параметры:

  • Template – задает шаблон для нового документа
  • NewTemplate – определяет, сделать ли новый документ шаблоном (TRUE) или нет (FALSE)
  • DocumentType – позволяет задать тип создаваемого документа, возможные значения: wdNewBlankDocument, wdNewEmailMessage, wdNewFrameset или wdNewWebPage (новый чистый документ, значение по умолчанию).
  • Visible – видимость нового документа (TRUE или FALSE).

При отсутствии параметров, будет создан чистый документ на основе шаблона Normal.dot.

Обратите внимание, что свойство Visible есть и у объекта Word Application, там оно позволяет показать или скрыть все экземпляры объекта Application.

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

' --------------------------------------------
' Создание документов word
' Application Documents Word
' documents-add-word.
' --------------------------------------------
Option Explicit
 
dim objWord, objDoc, i
 
' Создаем ссылку на объект Word.Application
Set objWord = CreateObject("Word.Application")
' Создаем ссылку на объект Documents
Set objDoc = objWord.Documents
' Делаем видимым приложение Word
objWord.Visible = True
 
' Создаем пять документов
for i=1 to 5
     objDoc.Add
Next
 
' Выводим количество созданных документов
MsgBox "Количество документов " & objDoc.Count
 
'Закрываем все документы Word
objWord.Quit
// --------------------------------------------
// Создание документов word
// Application Documents Word
// documents-add-word.js
// --------------------------------------------
 
var objWord, objDoc, i;
 
// Создаем ссылку на объект Word.Application
objWord = WScript.CreateObject("Word.Application");
// Создаем ссылку на объект Documents
objDoc = objWord.Documents;
// Делаем видимым приложение Word
objWord.Visible = true;
 
// Создаем пять документов
for (i=1; i<=5; i++){
     objDoc.Add();
}
 
// Выводим количество созданных документов
WScript.Echo ("Количество документов " + objDoc.Count);
 
//Закрываем все документы Word
objWord.Quit()

Item(index) переход к заданному элементу коллекции по его индексу. Значение индекса можно задавать как через метод, так и через коллекцию, так как метод Item используется по умолчанию. Следующие две строки кода являются эквивалентными:

Application.Documents(3)
Application.Documents.Item(3)
' -------------------------------------------
' Обработка коллекции документов
' Application Documents Word
' documents-count-word.vbs
' -------------------------------------------
Option Explicit
 
dim objWord, objDoc, i, j, objInfo
' вызываем процедуру CreateDoc
Call CreateDoc
 
objInfo = "Имя:" & vbCrLf
 
' Начинаем перебор коллекции Documents
for j=1 to objDoc.Count
     objInfo = objInfo & objDoc.Item(j).Name & vbCrLf
Next
 
' Выводим имена созданных документов
MsgBox objInfo
 
'Закрываем все документы Word
objWord.Quit
 
Sub CreateDoc
     Set objWord = CreateObject("Word.Application")
     Set objDoc = objWord.Documents
     objWord.Visible = True
 
     for i=1 to 5
                 objDoc.Add
     Next
End Sub
// -----------------------------------------
// Обработка коллекции документов
// Application Documents Word
// documents-count-word.js
// -----------------------------------------
 
var objWord, objDoc, i, j, objInfo
CreateDoc()
objInfo = "Имя:n";
 
// Начинаем перебор коллекции Documents
for (j=1; j<=objDoc.Count; j++){
     objInfo += objDoc.Item(j).Name + "n";
}
 
// Выводим имена созданных документов
WScript.Echo(objInfo);
 
//Закрываем все документы Word
objWord.Quit()
 
function CreateDoc(){
     objWord = WScript.CreateObject("Word.Application");
     objDoc = objWord.Documents;
     objWord.Visible = true;
 
     for (i=1; i<=5; i++){
                 objDoc.Add();
     }
}

Open(FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format) – открыть заданный документ

  • FileName – только этот параметр является обязательным, содержит путь к файлу, если надо открыть несколько документов, то имена разделяются пробелами.
  • ConfirmConversions – содержит логическое значение, определяющее, надо ли отображать (TRUE) или нет (FALSE) отображать диалоговое окно Convert File, если документ записан не в формате Word.
  • ReadOnly – определяет, открывать ли документ только для чтения (значение TRUE).
  • AddToRecentFiles – если значение TRUE, то документ добавляется к списку файлов внизу меню Файл.
  • PasswordDocument, PasswordTemplate – пароль к документу или пароль к шаблону, соответственно. Application Documents Word.
  • Revert – если данный параметр содержит значение TRUE, то при попытке открыть уже открытый документ, сделанные в нем изменения не будут сохраняться. Если значение FALSE – произойдет простая активизация документа.
  • WritePasswordDocument – пароль, который запрашивается при сохранении документа.
  • WritePasswordTemplate — пароль, который запрашивается при сохранении шаблона.
  • Format – параметр содержит параметр для преобразования файла. Значения: wdOpenFormatAuto (по умолчанию), wdOpenFormatDocument, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText.

Save() и Close() – сохранение и закрытие (соответственно) всех документов в заданной коллекции.

Содержание

  • 1 Add a word document
  • 2 Close a document
  • 3 Generating Word ata from an Excel VBA program
  • 4 Load contact table from Access and create letter in Word
  • 5 Open an Existing Document
  • 6 Save a document
  • 7 Save Changes to a Document
  • 8 To close a specific document, you can close the active document or you can specify a document name:
  • 9 To create a new document that uses a specific template, use this:
  • 10 To save a document with a new name, use the SaveAs method

Add a word document

   <source lang="vb">

Sub wordDoc()

   Dim WordApp As Object
   Set WordApp = CreateObject("Word.Application")
   With WordApp
       .Documents.Add
   End With

End Sub

</source>
   
  

Close a document

   <source lang="vb">

Sub exitFor()

   Dim Doc As Document
   For Each Doc In Documents
       If Doc.Name = "Document1" Then Exit For
       Doc.Close
   Next Doc

End Sub

</source>
   
  

Generating Word ata from an Excel VBA program

   <source lang="vb">

Sub MakeMemos()

   Dim WordApp As Object
   Set WordApp = CreateObject("Word.Application")
   
   For i = 1 To 3
       Application.StatusBar = "Processing Record " & i
       SaveAsName = ThisWorkbook.Path & "test.doc"
       With WordApp
           .Documents.Add
           With .Selection
               .Font.Size = 14
               .Font.Bold = True
               .ParagraphFormat.Alignment = 1
               .TypeText Text:="M E M O R A N D U M"
               .TypeParagraph
               .TypeParagraph
               .Font.Size = 12
               .ParagraphFormat.Alignment = 0
               .Font.Bold = False
               .TypeText Text:="Date:" & vbTab & Format(Date, "mmmm d, yyyy")
               .TypeParagraph
               .TypeText Text:="To:" & vbTab & " Manager"
               .TypeParagraph
               .TypeText Text:="From:" & vbTab & _
                  Application.userName
               .TypeParagraph
               .TypeParagraph
               .TypeText "text"
               .TypeParagraph
               .TypeParagraph
               .TypeText Text:="Units Sold:" & vbTab & "asdf"
               .TypeParagraph
               .TypeText Text:="Amount:" & vbTab & Format(1000, "$#,##0")
           End With
               .ActiveDocument.SaveAs FileName:=SaveAsName
               .ActiveWindow.Close
       End With
   Next i
   WordApp.Quit
   Set WordApp = Nothing
   Application.StatusBar = ""
   MsgBox " memos were created and saved in " & ThisWorkbook.Path

End Sub

</source>
   
  

Load contact table from Access and create letter in Word

   <source lang="vb">

Sub ControlWord()

   Dim objWord As New Word.Application
   Dim rsContacts As New ADODB.Recordset
   Dim strLtrContent As String
   rsContacts.ActiveConnection = CurrentProject.Connection
   rsContacts.Open "tblContacts"
   
   objWord.Documents.Add
   
   Do While Not rsContacts.EOF
     strLtrContent = rsContacts("FirstName") & " " & rsContacts("LastName")
     strLtrContent = strLtrContent & rsContacts("Address") & vbCrLf
     strLtrContent = strLtrContent & rsContacts("City") & ", " & rsContacts("Region")
     strLtrContent = strLtrContent & "  " & rsContacts("PostalCode") 
     strLtrContent = strLtrContent & "Dear " & rsContacts("FirstName") & " "
     strLtrContent = strLtrContent & rsContacts("LastName") & ":" 
   
       objWord.Selection.EndOf
       objWord.Selection.Text = strLtrContent
   
       objWord.Selection.EndOf
       objWord.Selection.InsertBreak
       
       rsContacts.MoveNext
   Loop
   objWord.Visible = True
   objWord.PrintPreview = True

End Sub

</source>
   
  

Open an Existing Document

   <source lang="vb">

Sub Main()

   Dim wdApp As Word.Application
   
   Set wdApp = GetObject(, "Word.Application")
   wdApp.Documents.Open Filename:="C:Arrays.docx", ReadOnly:=True, AddtoRecentFiles:=False

End Sub

</source>
   
  

Save a document

   <source lang="vb">

Sub WordLateBound()

   Dim objWord As Object 
   Dim objDoc As Object 
   Set objWord = CreateObject("Word.Application") 
   Set objDoc = objWord.Documents.Add 
   objDoc.SaveAs "C:testdoc2.doc" 
   objDoc.Close 
   Set objDoc = Nothing 
   Set objWord = Nothing 

End Sub

</source>
   
  

Save Changes to a Document

   <source lang="vb">

Sub main()

   Dim wdApp As Word.Application
   
   Set wdApp = GetObject(, "Word.Application")
   wdApp.Documents.Save

End Sub

</source>
   
  

To close a specific document, you can close the active document or you can specify a document name:

   <source lang="vb">

Sub main()

   Dim wdApp As Word.Application
   Set wdApp = GetObject(, "Word.Application")
   wdApp.ActiveDocument.Close
   "or
   wdApp.Documents("Arrays.docx").Close

End Sub

</source>
   
  

To create a new document that uses a specific template, use this:

   <source lang="vb">

Sub add()

   Dim wdApp As Word.Application
   
   Set wdApp = GetObject(, "Word.Application")
   wdApp.Documents.Add Template:="Contemporary Memo.dot"

End Sub

</source>
   
  

To save a document with a new name, use the SaveAs method

   <source lang="vb">

Sub Main()

   Dim wdApp As Word.Application
   Set wdApp = GetObject(, "Word.Application")
   wdApp.ActiveDocument.SaveAs "C:MemoTest.docx"

End Sub

</source>

Like this post? Please share to your friends:
  • Documentary about spoken word
  • Document write use these words and word
  • Document word search software
  • Document with word count
  • Document window in microsoft word