Word application open document

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

Использование Word в приложениях на Visual Basic 6 открывает широчайшие возможности для создания профессионально оформленных документов (например отчетов). Это часто необходимо при работе в фирме или на предприятии для обеспечения документооборота. Основным преимуществом использования Wordа в этом случае является то, что практически на всех компьютерах, используемых в фирмах и на предприятиях установлены Windows и пакет Microsoft Office. Поэтому подготовленные документы Word не требуют каких-либо дополнительных усилий для их просмотра, печати и редактирования. Единственное что нужно помнить, это то что работа через автоматизацию OLE (связывание и внедрение объектов) на деле оказывается довольно медленной технологией, хотя и очень полезной.

Чтобы использовать объекты Word в Visual Basic , необходимо инсталлировать сам Word. После этого вы получаете в своё распоряжение библиотеку Microsoft Word Object Library, которую нужно подключить к текущему проекту через диалоговое окно «Разработать»>>»Ссылки» (References) и указать Microsoft Word 9.0 Object Library (для Word 2000).

Два самых важных объекта Word это Word.Application и Word.Document. Они обеспечивают доступ к экземпляру приложения и документам Word.

Поэтому в раздел Generals «Общее» формы введите следующий код для объявления объектных переменных приложения Word и документа Word.

Dim WordApp As Word.Application '  экземпляр приложения
Dim DocWord As Word.Document'  экземпляр документа

Чтобы создать новый экземпляр Word, введите такой код кнопки;

Private Sub Комманда1_Click()

'создаём  новый экземпляр Word-a
Set WordApp = New Word.Application

'определяем видимость Word-a по True - видимый,
'по False - не видимый (работает только ядро)
WordApp.Visible = True

'создаём новый документ в Word-e
Set DocWord = WordApp.Documents.Add

'// если нужно открыть имеющийся документ, то пишем такой код
'Set DocWord = WordApp.Documents.Open("C:DDD.doc")

'активируем его
DocWord.Activate

End Sub

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

(вообще-то Word использует для всех размеров своих элементов пункты, поэтому для использования других единиц измерения, необходимо использовать встроенные функции форматирования.)

Например:

  • CentimetersToPoints(Х.ХХ) — переводит сантиметры в пункты.
  • MillimetersToPoints(X.XX) — переводит миллиметры в пункты
Private Sub Комманда2_Click()

'отступ слева "2,0 сантиметра"
DocWord.Application.Selection.PageSetup.LeftMargin = CentimetersToPoints(2)

'отступ справа "1,5 сантиметра"
DocWord.Application.Selection.PageSetup.RightMargin = CentimetersToPoints(1.5)

'отступ сверху "3,5 сантиметра"
DocWord.Application.Selection.PageSetup.TopMargin = CentimetersToPoints(3.5)

'отступ снизу "4,45 сантиметра"
DocWord.Application.Selection.PageSetup.BottomMargin = CentimetersToPoints(4.45)

End Sub

Небольшое отступление.

Для того чтобы в своём приложении не писать постоянно одно и тоже имя объекта, можно использовать оператор With.

Например код находящейся выше можно переписать так:

With DocWord.Application.Selection.PageSetup
.LeftMargin = CentimetersToPoints(2)
.RightMargin = CentimetersToPoints(1.5)
.TopMargin = CentimetersToPoints(3.5)
.BottomMargin = CentimetersToPoints(4.45)
End With

Если вам необходимо создать документ Word с нестандартным размером листа, то используйте данный код:

With DocWord.Application.Selection.PageSetup
.PageWidth = CentimetersToPoints(20)    'ширина листа (20 см)
.PageHeight = CentimetersToPoints(25)   'высота листа (25 см)
End With

Данный код меняет ориентацию страницы (практически меняет местами значения ширины и высоты листа):

 
DocWord.Application.Selection.PageSetup.Orientation = wdOrientLandscape
  • wdOrientLandscape — альбомная ориентация ( число 1)
  • wdOrientPortrait — книжная ориентация ( число 0)

Для сохранения документа под новым именем и в определенное место
используйте данный код код:

'сохраняем документ как
DocWord.SaveAs "c:DDD.doc"

После такого сохранения вы можете про ходу работы с документом сохранять его.

'сохраняем документ
DocWord.Save

Или проверить, были ли сохранены внесенные изменения свойством Saved и если изменения не были сохранены — сохранить их;

If DocWord.Saved=False Then DocWord.Save

Завершив работу с документом, вы можете закрыть сам документ методом Close и сам Word методом Quit.

'закрываем документ (без запроса на сохранение)
DocWord.Close True

'закрываем Word (без запроса на сохранение)
WordApp.Quit True

'уничтожаем обьект - документ
Set DocWord = Nothing

'уничтожаем обьект - Word
Set WordApp = Nothing

Если в методах Close и Quit не использовать необязательный параметр True то Word запросит согласие пользователя (если документ не был перед этим сохранён) на закрытие документа.

Если вам необходимо оставить Word открытым, просто не используйте методы Close и Quit.

Если вам необходимо поставить пароль на документ, то используйте код:

DocWord.Protect wdAllowOnlyComments, , "123456789"

Пример программы можно скачать здесь.

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

Open Word Document

This Word VBA Macro will open a word document from the specified directory:

Sub OpenDoc()
    Dim strFile As String

    strFile = "c:UsersNenadDesktopTest PM.docm"    'change to path of your file
    If Dir(strFile) <> "" Then    'First we check if document exists at all at given location
        Documents.Open strFile
    End If
End Sub

Now you can interact with the newly opened document with the ActiveDocument Object. This code will add some text to the document.

ActiveDocument.Range(0, 0).Text = "Add Some Text"

Open Document to Variable

You can also open a Word document, immediately assigning it to a variable:

Sub OpenDoc()
    Dim strFile As String
    Dim oDoc as Document

    strFile = "c:UsersNenadDesktopTest PM.docm"    'change to path of your file
    If Dir(strFile) <> "" Then    'First we check if document exists at all at given location
        Set oDoc = Documents.Open strFile
    End If
End Sub

Allowing you to interact with the document via the variable oDoc.:

oDoc.Range(0, 0).Text = "Add Some Text"

Generally it’s best practice to open to a variable, giving you the ability to easily reference the document at any point.

Open Word Document From Excel

This VBA procedure will open a Word Document from another MS Office program (ex. Excel):

Sub OpenDocFromExcel()
    Dim wordapp
    Dim strFile As String


    strFile = "c:UsersNenadDesktopTest PM.docm"
    Set wordapp = CreateObject("word.Application")
    wordapp.Documents.Open strFile
    wordapp.Visible = True
End Sub

How do you open a word document in VB.NET. The document is a manual for the program.

Alexis Pigeon's user avatar

asked Feb 26, 2010 at 1:50

muckdog12's user avatar

3

You need to call Process.Start(documentPath).

answered Feb 26, 2010 at 1:55

SLaks's user avatar

SLaksSLaks

861k176 gold badges1895 silver badges1959 bronze badges

3

You open it by:

Dim oWord As Word.Application
Dim oDoc As Word.Document
oWord = CreateObject("Word.Application")
oWord.Visible = True
oDoc = oWord.Documents.Add("C:wordfile.docx")

Don’t forget to use Imports Microsoft.Office.Interop.Word

jonsca's user avatar

jonsca

10.2k26 gold badges56 silver badges62 bronze badges

answered Sep 17, 2012 at 22:02

John Smith's user avatar

John SmithJohn Smith

811 silver badge3 bronze badges

Use Process.Start to launch a Word document in the appropriate editor.

If you have access to the assemblies, you can use the Microsoft.Office.Interop.Word namespace to manipulate Word documents in code, though this is probably nowhere near as trivial as Excel interop, unless you’re making very simple word documents.

answered Feb 26, 2010 at 2:07

Nick Bedford's user avatar

Nick BedfordNick Bedford

4,35329 silver badges36 bronze badges

The Microsoft Web Browser Control can display ActiveX documents. This control can be placed onto a WinForms or WPF application

Microsoft Word is a ActiveX document provider. So you can load Microsoft Word documents into the Web Browser control. See this example for VB.Net 2005

You then have total control of the Microsoft Word child window. Load any document, re-size window, change visibility etc, you can even send control messages (macros)

Some other SO references:

  • making-word-document-embedded-in-a-web-page-editable-or-read-only
  • embedding-word-document-in-web-form

Community's user avatar

answered Feb 27, 2010 at 20:47

TFD's user avatar

TFDTFD

23.6k2 gold badges34 silver badges51 bronze badges

 

Здравствуйте, подскажите пожалуйста, какой код VBA нужно написать, чтобы с кнопки ActiveX на листе Excel открывался Word файл. Файл лежит в одной папке с Excel. НО планируется распространить данный файл всем коллегам , поэтому , нужен относительный путь к файлу (то есть путь к файлу будет у каждого человека свой ) ?

Изменено: Владислав Макеев08.09.2022 00:41:14

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#2

08.09.2022 00:56:26

Код
Sub Открыть_Word_Файл()
    Dim myWord As Object, myDocument As Object, WordFileName As String
    
    WordFileName = "Test.docx" 'название файла Word
    Set myWord = CreateObject("Word.Application")
    Set myDocument = myWord.Documents.Open(ThisWorkbook.Path & Application.PathSeparator & WordFileName)
    myWord.Visible = True
End Sub

Изменено: New08.09.2022 00:58:02

 

Владислав Макеев

Пользователь

Сообщений: 8
Регистрация: 08.09.2022

#3

09.09.2022 16:23:42

Цитата
написал:

Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8      Sub   Открыть_Word_Файл()          Dim   myWord   As   Object  , myDocument   As   Object  , WordFileName   As   String                   WordFileName =   "Test.docx"   'название файла Word          Set   myWord = CreateObject(  "Word.Application"  )          Set   myDocument = myWord.Documents.Open(ThisWorkbook.Path & Application.PathSeparator & WordFileName)          myWord.Visible =   True    End   Sub   

 

Спасибо огромное ,за такой быстрый ответ!!!Код заработал!!! Но если не сложно сможете подсказать, excel открывает у меня файл, но в свернутом виде , как доработать код так , чтобы он всегда открывался в развернутом виде?  

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#4

09.09.2022 16:35:19

пожалуйста, не нажимайте кнопку Цитировать, я помню, что я писал вам. Нажимайте кнопку «Имя»
попробуйте так

Код
Sub Открыть_Word_Файл()
    
    Dim myWord As Object, myDocument As Object, WordFileName As String
     
    WordFileName = "Test.docx" 'название файла Word
    Set myWord = CreateObject("Word.Application")
    Set myDocument = myWord.Documents.Open(ThisWorkbook.Path & Application.PathSeparator & WordFileName)
    myWord.Visible = True
    myWord.WindowState = xlMaximized
End Sub

Изменено: New10.09.2022 01:14:22

 

Тимофеев

Пользователь

Сообщений: 1497
Регистрация: 01.09.2020

#5

09.09.2022 16:48:57

Код
Sub Открыть_Word_Файл()
    Dim myWord As Object, myDocument As Object, WordFileName As String
     
    WordFileName = "Test.docx" 'название файла Word
    Set myWord = CreateObject("Word.Application")
    Set myDocument = myWord.Documents.Open(ThisWorkbook.Path & Application.PathSeparator & WordFileName)
    myWord.Visible = True
    'myWord.Activate
    myWord.WindowState = 1
End Sub
 

Тимофеев, спасибо за Ваш вариант он мне подошёл, я активировал строчку кода myWord.Active и теперь файл открывается при запуске кнопки! Но вот небольшой вопрос , а если я положу Word файл в отдельную папку, он мне выдаст ошибку , как это поправить?

Изменено: Владислав Макеев10.09.2022 00:35:58

 

добавить в макрос диалог выбора файла

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#8

10.09.2022 01:20:06

Код
Sub Открыть_Word_Файл()
    Dim myWord As Object, myDocument As Object, sPath As String
      
    sPath = Application.GetOpenFilename("Файлы Word (*.doc*),*.doc*", 1, "Выберите файл Word", , False)
    If sPath = "False" Then Exit Sub

    Set myWord = CreateObject("Word.Application")
    Set myDocument = myWord.Documents.Open(sPath)
    myWord.Visible = True
    myWord.WindowState = xlMaximized
End Sub

Изменено: New10.09.2022 01:22:02

 

Александр Моторин, New, Извините что вел вас в заблуждение , но по моему я некорректно выразился. Под словом отдельная папка я имел ввиду , то что файл excel и файл  word лежат в одной папке.И для того чтобы вордовский файл не мешался ,я для него создал отдельную папку там же , по сути файлы находятся рядом. Пример, путь к файлу excel: C:Рабочий столРасчётыРасчёты закупок.xlsx , а путь к вордовскому файлу C:Рабочий столРасчётыПрайсыАктуальный прайс.docx.
Я прошу подсказать как  код из сообщения #5 доработать так, чтобы эксель искал вордовский файл именно в папке «Прайсы» ? Но при этом , как я понимаю ссылка должна быть относительная, то есть ,чтобы эксель не привязывался к определенному пути, так как я собираюсь распространить этот файл своим коллегам ,а у них пути  к файлу будут разные.

Изменено: Владислав Макеев10.09.2022 03:03:55

 

New

Пользователь

Сообщений: 4581
Регистрация: 06.01.2013

#10

10.09.2022 03:06:57

чувствую эта тема будет бесконечной…

Код
Sub Открыть_Word_Файл()
    Dim myWord As Object, myDocument As Object, WordFileName As String
      
    WordFileName = "ПрайсыАктуальный прайс.docx" 'папка и название файла Word
    Set myWord = CreateObject("Word.Application")
    Set myDocument = myWord.Documents.Open(ThisWorkbook.Path & WordFileName)
    myWord.Visible = True
    myWord.Activate
    myWord.WindowState = 1
End Sub
 

New, Тимофеев. Искренне благодарю за плодотворную, качественную работу, выполненную в короткий срок на высоком профессиональном уровне. Это позволило достичь эффективных результатов. Спасибо за проявленные старания, ответственность, добросовестность, трудолюбие, за удачно примененные глубокие знания и огромный практический опыт. Надеюсь на еще более успешную работу в дальнейшем.

Изменено: Владислав Макеев11.09.2022 16:40:23

 

RAN

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

#12

11.09.2022 19:46:46

Код
Sub qq()
    Dim myDocument As Object, WordFileName As String
    WordFileName = ThisWorkbook.Path & "/Документ Microsoft Word.docx" 'папка и название файла Word
    Set myDocument = GetObject(WordFileName)
    myDocument.Parent.Visible = True
End Sub

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

Like this post? Please share to your friends:
  • Word application new document
  • Word application is running
  • Word application in net
  • Word application format text
  • Word application for windows