Макрос в excel открыть файл word

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

Если для передачи данных из Excel в Word необходим новый документ, можно воспользоваться примером кода, приведенного ниже. Макрос проверяет запущен ли Word и если он запущен, то добавляет новый документ, если же не запущен, то сначала запускает Word, а затем добавляет новый документ.

Sub Zapusk_Word_iz_Excel_01()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Add
            objWrdApp.Visible = True
        End If
    Set objWrdDoc = objWrdApp.Documents.Add
    Set objWrdDoc = Nothing
    Set objWrdApp = Nothing
End Sub

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

Макрос, запускающий Word из Excel и открывающий существующий документ

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

Sub Zapusk_Word_iz_Excel_02()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
            objWrdApp.Visible = True
        End If
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    Set objWrdDoc = Nothing
    Set objWrdApp = Nothing
End Sub

При копировании этого кода на свой компьютер, не забудьте изменить путь к файлу и его имя. Запуск приложения можно сделать невидимым, если в коде изменить True на False.

Макрос для передачи данных из Excel в Word

Ниже приведен программный код макроса, копирующий в активной рабочей книге Excel диапазон с данными A1:E2 и вставляющий его в открытый документ Word. После передачи данных из Excel в Word производится закрытие документа с сохранением изменений и выход из приложения.

Sub Peredacha_Dannyh_iz_Excel_v_Word()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
            objWrdApp.Visible = False
        End If
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    Range("A1:E2").Copy
    objWrdDoc.Range(0).Paste
    objWrdDoc.Close True
    'True - с сохранением, False - без сохранения
    objWrdApp.Quit
    Set objWrdDoc = Nothing
    Set objWrdApp = Nothing
End Sub

Другие материалы по теме:

Float

1

09.03.2007, 12:22. Показов 26207. Ответов 6


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

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

Pavel55

971 / 353 / 135

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

Сообщений: 764

09.03.2007, 21:27

2

Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

1) Для того, чтобы создать новый документ Word, напечатать там что-нибудь, сохранить его и закрыть

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Option Explicit
Sub CreateWordDoc()
Dim WordObj As Object  'Объект Word.application
Dim WordDoc As Object   'Создаваемый документ
    Set WordObj = CreateObject("Word.Application")
    WordObj.Visible = True
    Set WordDoc = WordObj.Documents.Add
    WordObj.Keyboard (1033) 'English
    WordObj.Selection.TypeText Text:="Hello, World!!!"
    WordObj.Selection.TypeParagraph
    WordObj.Application.Keyboard (1049) 'Russian
    WordObj.Selection.TypeText Text:="Привет, Мир!!!"
    'WordDoc.SaveAs Filename:="C:Temp" & WordDoc & ".doc"  'сохраняем его
    'WordDoc.Close 'закрываем только документ
    'WordObj.Quit 'закрываем всё приложение
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub

2) Чтобы открыть уже существующий документ, распечатать его и закрыть

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub PrintOutWordFile()
    Dim WordObj As Object
    Dim WordDoc As Object
        Set WordObj = CreateObject("Word.Application")
        Set WordDoc = WordObj.Documents.Open("C:TempPrint.doc")
       ' WordObj.Visible = True 'можно его отображать, можно не отображать
       ' Call wDoc.PrintOut 'распечатываем его
       ' Call WordObj.Quit(False) 'закрываем всё приложение
    Set WordDoc = Nothing
    Set WordObj = Nothing
End Sub



0



Float

10.03.2007, 22:13

3

Спасибо

Float

15.03.2007, 19:58

4

Уже совсем наглость — как выдать текст с новой строки?

Pavel55

971 / 353 / 135

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

Сообщений: 764

15.03.2007, 23:30

5

Точно не знаю, попробуй

Visual Basic
1
Selection.TypeParagraph



0



0 / 0 / 0

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

Сообщений: 41

07.11.2016, 19:32

6

А если путь к файлу документа будет меняться?
На каждом компьютере будет на разных дисках. Или, например, на рабочем столе. Или с флешки запускаться. Можно как то прописать путь не с самого начала, а чтобы он находил файл документа в папке, в которой находится открытая книга эксель?
Например, книга, с которой запускается макрос, находится по адресу: «G:ДокументыХламКнига.xlsm», а адрес документа, который нужно запустить: «G:ДокументыХламПапкаBiatlon.docx».
Как прописать, чтобы указать только «ПапкаBiatlon.docx»? Тогда когда файлы будут кочевать с компьютера на компьютер, адрес меняться не будет.



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

07.11.2016, 20:20

7

CrazyTonik, путь книги с макросом это thisworkbook.Path
Соответственно,

Visual Basic
1
Set WordDoc = WordObj.Documents.Open(thisworkbook.Path & "ПапкаBiatlon.docx")



0



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

This Microsoft Excel macro will open a Microsoft Word document from excel. With this macro, you can open any word document on your computer. This is a small but cool macro; you can attach it to a button or checkbox and then, whenever a user clicks the button or checkbox, have a specified Microsoft word document open.

You can change the word document that will open by changing this line of code objWord.Documents.Open «C:test.doc» so that the directory and file name, including extension, point to the desired file on your computer.

Where to install the macro:  Module

Open a Word Document from Excel

Sub Open_Word_Document()

'Opens a Word Document from Excel

Dim objWord As Object

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

'Change the directory path and file name to the location
'of your document

objWord.Documents.Open "C:test.doc"

End Sub


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Open a PowerPoint Presentation from Excel

Macro: This free macro for Microsoft Excel allows you to open any PowerPoint presentation fro…

Send Emails through Outlook using Email Addresses from Excel and text from Word

Macro: Send Emails from Excel Course
This macro allows you to send an email to a list of recipien…

Delete a VBA Module From Excel

Macro: Delete a VBA macro module from Excel with this macro. This macro allows you to fully …

Open PDF from Excel

Tutorial:
How to open a PDF file from a clickable button, link, or image in Excel.  This allows yo…

Open Microsoft Word from Excel

Macro: This free macro will open the Microsoft Word program on your computer. You do need to have…

Remove Personal Information from Excel Files

Tutorial:
How to remove all personally identifiable information from an Excel file.

When a file is…

How to Install the Macro

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  8. Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
  9. You are now ready to run the macro.

 

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

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

 

New

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

Сообщений: 4582
Регистрация: 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

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

Сообщений: 4582
Регистрация: 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

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

Сообщений: 4582
Регистрация: 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

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

Сообщений: 4582
Регистрация: 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

Понравилась статья? Поделить с друзьями:
  • Макрос в excel лабораторная работа
  • Макрос в excel копирование в другой файл
  • Макрос в excel как очистить весь лист
  • Макрос в excel если то примеры
  • Макрос в excel если то пример