Vba 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.

Доступ к документам Word с помощью VBA

Если написанная вами VBA-процедура функционирует прямо в документе, вы должны указать объект этого документа непосредственно в коде, Часто вы сможете сделать это неявным образом, используя объект Selection, о котором я расскажу дальше в настоящей главе. Однако в остальных ситуациях вам придется явно идентифицировать целевой объект.

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

Типичная VBA-процедура в Word выполняет все свои магические действия в том документе, который в данный момент открыт для редактирования. Для указания активного документа используется объект ActiveDocument. Например, приведенная выше инструкция просто закрывает активный документ:

ActiveDocument.Close

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

Если вам необходимо работать с определенным документом, который сейчас не активен, вы должны указать его как члена коллекции Documents, состоящей изо всех документов, открытых в настоящее время в Word. Как и в случае с любой другой коллекцией объектов в VBA, вы можете обратиться к отдельному документу в коллекции, используя его заголовок, который в данном случае совпадает с именем файла (только именем файла, а не с полным путем к нему). Вот соответствующий пример;

Documents(«Toy Store News letter.doc»)

Поскольку вы не знаете точно имя файла целевого документа заранее, а пользователь может в любой момент его изменить, вам следует создать переменную, которая будет содержать имя файла. После этого вы можете использовать эту переменную для указания объекта документа, например, так: Documents (strDocName).

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

Documents(3)

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

strDocName = Documents(2).Name

Для создания нового документа используйте метод Add коллекции объектов Documents. Используемый без каких-либо документов, метод Add создает новый документ, базирующийся на шаблоне Normal (Обычный). Для указания другого шаблона укажите путь к нему в качестве аргумента, как показано ниже:

Documents.Add template:= _

«C:WindowsApplication DataXMicrosoftHidden templates»

Для открытия существующего документа используйте метод Open коллекции объектов Documents. Конечно же, вам необходимо указать полный путь к документу, как показано ниже:

Documents.Open FileName:= _

«С:ToysToys for infants.doc»

Для активизации уже открытого документа используйте метод Activate коллекции объектов Documents. Предположим, что вам необходимо, чтобы ваша VBA-программа активизировала определенный документ, который в момент запуска программы может быть и открыт, и закрыт. Используйте код, подобный показанному ниже, для активизации открытого документа или открытия документа, если он еще не открыт:

Sub DocActivateOrOpen()

Dim docFileName As String, docPath as String

docFileName = «Старые игрушки.doc»

docPath — «C:Toys»

For Each target Doc In Documents

If targetDoc.Name = docFileName Then

targetDocIsOpen = True

End If

Next targetDoc

If targetDocIsOpen = True Then

Documents(docFileName).Activate

Else

Documents.Open FileName := docPath & docFileName

End If

End Sub

Поскольку каждый документ Word состоит из одного или нескольких разделов, вы можете ожидать, что Word VBA содержит коллекцию Sections и отдельные объекты Section для работы с этими элементами. Так оно и есть. Наиболее важное применение объектов Section — организация доступа к верхним и нижним колонтитулам (через объект Header Footer ). Вы можете добавлять новые разделы в документ, используя метод Add коллекции Sections или метод Insert Break объекта Range или Selection.

Читайте также

Доступ к WMI с помощью сервера сценариев

Доступ к WMI с помощью сервера сценариев
Полное понимание WMI невозможно без знания тех возможностей, которые она предоставляет администратору. Поэтому рассмотрим сейчас некоторые примеры написания сценариев сервера сценариев Windows с использованием возможностей WMI. Раздел

Доступ к базе данных с помощью ASP.NET

Доступ к базе данных с помощью ASP.NET
Ядром любого приложения баз данных является база данных. Для использования базы данных необходимо иметь надежный и безопасный способ подключения. На платформе .NET этот способ реализуется с помощью пространства имен System.Data и одной

Доступ к объектам с помощью Web-служб

Доступ к объектам с помощью Web-служб
Итак, мы приступаем к работе на совершенно новом уровне, т.е. с использованием Web-служб. С самого начала Web-среда рассматривалась как способ передачи данных между двумя точками. Именно эта исходная концепция способствовала развитию и

Поиск и замена текста с помощью VBA в Word

Поиск и замена текста с помощью VBA в Word
Хотя это звучит и несколько необычно, но Find — это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.1.

8.2. Публикация записей в блоге с помощью Word

8.2. Публикация записей в блоге с помощью Word
Нововведением Word 2007 является возможность опубликовывать записи в блоги непосредственно из окна программы. Это очень удобно, поскольку Word имеет гораздо больше возможностей по набору и форматированию текста, чем текстовые

18.2.1. Склонность к большим документам

18.2.1. Склонность к большим документам
Средства подготовки документов в Unix всегда были предназначены, главным образом, для разрешения трудностей, связанных с компоновкой крупных и сложных документов. Первоначально такими документами были патентные заявки и техническая

18.2.1. Склонность к большим документам

18.2.1. Склонность к большим документам
Средства подготовки документов в Unix всегда были предназначены, главным образом, для разрешения трудностей, связанных с компоновкой крупных и сложных документов. Первоначально такими документами были патентные заявки и техническая

ГЛАВА 22. Доступ к базам данных с помощью ADO.NET

ГЛАВА 22. Доступ к базам данных с помощью ADO.NET
Если вы не являетесь профессиональным разработчиком видеоигр, вас, наверное, заинтересует тема доступа к базам данных. Как и следует ожидать, платформа .NET определяет целый ряд пространств имен, обеспечивающих взаимодействие с

MICROSOFT WORD

MICROSOFT WORD

…Я люблю – и значит, я живу, – это из Высоцкого …Я пишу – и значит, я работаю в Word, – это уже из нашей повседневной реальности… Наверное, нет в мире другой столь популярной программы, как текстовый редактор Word (исключая разве что Windows, хотя Word превосходно себя

Word Utilities

Word Utilities
(http://wordutilities.chat.ru/)Эта небольшая, всего 0,3 Мб, программка поможет тем, кто никак не может привыкнуть к переключению языка набора или ставит множество пробелов между словами.? Word Utilities оптимизирует размер межсловных пробелов.? Разберется с короткими строками абзацев.?

MS Word

MS Word
Создание и разметка документаСовременную жизнь нельзя представить без обилия текстовых документов в бумажном и электронном виде.Microsoft Word – один из лучших текстовых редакторов. Он позволяет создавать и редактировать документы, добавлять в них таблицы и рисунки,

2. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ, СОДЕРЖАЩИМ В ОСНОВНОМ СПЛОШНОЙ ТЕКСТ

2. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ, СОДЕРЖАЩИМ В ОСНОВНОМ СПЛОШНОЙ ТЕКСТ

2.1. Построение документа
2.1.1. При необходимости допускается делить документ на части. Деление на части осуществляется на уровне не ниже раздела. Каждую часть комплектуют отдельно. Всем частям

3. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ. СОДЕРЖАЩИМ ТЕКСТ, РАЗБИТЫЙ НА ГРАФЫ

3. ТРЕБОВАНИЯ К ПРОГРАММНЫМ ДОКУМЕНТАМ. СОДЕРЖАЩИМ ТЕКСТ, РАЗБИТЫЙ НА ГРАФЫ
3.1. Программные документы, содержащие текст, разбитый на графы, при необходимости разделяют на разделы и подразделы, которые не нумеруют. Допускается линии, разграничивающие строки и графы, не

Word

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

title ms.prod ms.assetid ms.date

Working with Document Objects

word

af304f65-6cdd-ff7d-a81f-cce0161f2b47

06/08/2017

Working with Document Objects

In Visual Basic, the methods for modifying files are methods of the Document object or the Documents collection. This topic includes Visual Basic examples related to the following tasks:

  • Creating a new document

  • Opening a document

  • Saving an existing document

  • Saving a new document

  • Activating a document

  • Determining if a document is open

  • Referring to the active document

Creating a new document

The Documents collection includes all of the open documents. To create a new document, use the Add method to add a Document object to the Documents collection. The following instruction creates a document.

A better way to create a document is to assign the return value to an object variable. The Add method returns a Document object that refers to the new document. In the following example, the Document object returned by the Add method is assigned to an object variable. Then, several properties and methods of the Document object are set. You can easily control the new document using an object variable.

Sub NewSampleDoc() 
    Dim docNew As Document 
    Set docNew = Documents.Add 
    With docNew 
        .Content.Font.Name = "Tahoma" 
        .SaveAs FileName:="Sample.doc" 
    End With 
End Sub

Opening a document

To open an existing document, use the Open method with the Documents collection. The following instruction opens a document named Sample.doc located in the MyFolder folder.

Sub OpenDocument() 
    Documents.Open FileName:="C:MyFolderSample.doc" 
End Sub

Saving an existing document

To save a single document, use the Save method with the Document object. The following instruction saves the document named Sales.doc.

Sub SaveDocument() 
    Documents("Sales.doc").Save 
End Sub

You can save all open documents by applying the Save method to the Documents collection. The following instruction saves all open documents.

Sub SaveAllOpenDocuments() 
    Documents.Save 
End Sub

Saving a new document

To save a single document, use the SaveAs2 method with a Document object. The following instruction saves the active document as «Temp.doc» in the current folder.

Sub SaveNewDocument() 
    ActiveDocument.SaveAs FileName:="Temp.doc" 
End Sub

The FileName argument can include only the file name or the complete path (for example, «C:DocumentsTemporary File.doc»).

Closing documents

To close a single document, use the Close method with a Document object. The following instruction closes and saves the document named Sales.doc.

Sub CloseDocument() 
    Documents("Sales.doc").Close SaveChanges:=wdSaveChanges 
End Sub

You can close all open documents by applying the Close method of the Documents collection. The following instruction closes all documents without saving changes.

Sub CloseAllDocuments() 
    Documents.Close SaveChanges:=wdDoNotSaveChanges 
End Sub

The following example prompts the user to save each document before the document is closed.

Sub PromptToSaveAndClose() 
    Dim doc As Document 
    For Each doc In Documents 
        doc.Close SaveChanges:=wdPromptToSaveChanges 
    Next 
End Sub

Activating a document

To change the active document, use the Activate method with a Document object. The following instruction activates the open document named Sales.doc.

Sub ActivateDocument() 
    Documents("Sales.doc").Activate 
End Sub

Determining if a document is open

To determine if a document is open, you can enumerate the Documents collection by using a For Each…Next statement. The following example activates the document named Sample.doc if the document is open, or opens Sample.doc if it is not currently open.

Sub ActivateOrOpenDocument() 
    Dim doc As Document 
    Dim docFound As Boolean 
 
    For Each doc In Documents 
        If InStr(1, doc.Name, "sample.doc", 1) Then 
            doc.Activate 
            docFound = True 
            Exit For 
        Else 
            docFound = False 
        End If 
    Next doc 
 
    If docFound = False Then Documents.Open FileName:="Sample.doc" 
End Sub

Referring to the active document

Instead of referring to a document by name or by index number—for example, Documents("Sales.doc") —the ActiveDocument property returns a Document object that refers to the active document (the document with the focus). The following example displays the name of the active document, or if there are no documents open, it displays a message.

Sub ActiveDocumentName() 
    If Documents.Count >= 1 Then 
        MsgBox ActiveDocument.Name 
    Else 
        MsgBox "No documents are open" 
    End If 
End Sub

Word VBA, Open Document

Jun 07, 2015 in Dialogs

In this article I will explain how you can open a word document using VBA.


Opening Word Document:

If you are opening a word document from word you can use the code below:

Sub main()
Documents.Open ("D:TestFolderMain.docx")
End Sub

Where “D:TestFolderMain.docx” is the path where the word document is located.


Opening Word Document From Other Applications:

If you are opening a word document from another application, you would need to automate a word application first. This can be done using the code below:

Sub main()
Dim objWord As Object
'automate word application
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'open word document
objWord.documents.Open ("D:TestFolderMain.docx")
End Sub

For more information about automating word applications please see the article below:

  • VBA, Automating Word From Excel


Using Open File Dialogs

You could also ask the user to choose the path of the word document using an open file dialogs. I have covered this topic in detail in the article below. Although the article was written for VBA for Excel, the concept can also be used in VBA for Word:

  • Excel VBA, Open File Dialog

In the sample code below the user is asked to select the location of the word file from an open file dialog. After selecting the file, it is opened:

Sub main()
Dim intChoice As Integer
Dim strPath As String
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Application.FileDialog(msoFileDialogOpen).AllowMultiSelect = False
intChoice = Application.FileDialog(msoFileDialogOpen).Show
'if the user selects a file
If intChoice <> 0 Then
    'get the path selected
    strPath = Application.FileDialog( _
        msoFileDialogOpen).SelectedItems(1)
    'opens the document
    objWord.documents.Open (strPath)
End If
End Sub

 See also:

  • VBA, Automating Word From Excel
  • Word Automation VBA, Common Errors
  • Word VBA, Apply Macro to Multiple Files
  • Word VBA, Modify Header For Multiple Files
  • Word Automation VBA, Common Errors
  • VBA, Write Excel Values to Word Document

If you need assistance with your code, or you are looking for a VBA programmer to hire feel free to contact me. Also please visit my website  www.software-solutions-online.com

Аннотация: Лекция посвящена описанию коллекции 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 — это открытый документ. У него есть множество свойств и методов, которые активно используются при программной работе с документами. Здесь мы рассмотрим важнейшие из них.

Понравилась статья? Поделить с друзьями:
  • Vba word объединение ячеек таблицы
  • Vba word примеры кода
  • Vba word обтекание текстом
  • Vba word пример кода
  • Vba word обновить оглавление