Если есть необходимость обратиться к данным, хранящимся в текстовом файле приложения 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
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом, нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Макрос, запускающий 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
Другие материалы по теме:
0 / 0 / 0 Регистрация: 11.08.2016 Сообщений: 55 |
|
1 |
|
11.08.2016, 22:07. Показов 14841. Ответов 16
Всем привет!Окажите содействие плиз: имеется папка с файлами .тхт необходим макрос который открывает все файлы из этой папки в Ворде(если возможно была признательна если можно было реализовать вывод диалогового окна выбора папки в котором сразу открывалась папка из которой нужно открыть файлы), затем нужно изменить на альбомную ориентацию , сделать 8 шрифт распечатать файл и сохранить в формате .doc .docx или .RTF тут не важно главное чтоб читался вордом и форматирование не слетало.Пробовала рекордером но получилось только изменение форматирования записать и печать. При сохранении он сохраняет одним и тем же именем т.е. в макрос записывается имя первого сохраняемого файла и все последующие пытается сохранить под тем же именем.такое реально реализовать ? Хелп ми))), около ста отчетов приходится лопатить вручную((((
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||||||
12.08.2016, 10:18 |
2 |
|||||||
Попробуйте так (только тестировать, разумеется, нужно на нескольких файлах)
~ Тоже самое, но без сообщений
0 |
roneta90 0 / 0 / 0 Регистрация: 11.08.2016 Сообщений: 55 |
||||
14.08.2016, 16:44 [ТС] |
3 |
|||
Добавлено через 31 минуту
Миниатюры
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
14.08.2016, 16:55 |
4 |
|||
и правильно пишет, что не находит ибо должен быть слэш, но форум его автоматически убирает. приходится вводить два слэша, но стоит забыть об этом правиле и …
0 |
0 / 0 / 0 Регистрация: 11.08.2016 Сообщений: 55 |
|
16.08.2016, 21:17 [ТС] |
5 |
Не получается(( . Тоже самое. Может тогда оставим только чтобы менялся шрифт ориентация страницы и сохранение с именем исходного файла Миниатюры
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
16.08.2016, 21:47 |
6 |
Смотрите пример, где для чистоты эксперимента, необходимо выбрать папку «Test_for_Roneta90»
0 |
0 / 0 / 0 Регистрация: 11.08.2016 Сообщений: 55 |
|
28.08.2016, 17:20 [ТС] |
7 |
тоже самое)))Ладно , впринципе открою файлы с помощью cntrl+0 . тогда макрос прописать чтобы менял ориентацию шрифт и сохранял с текущим именем файла и в формате док или докх или ртф вообщем чтоб форматиование сохранялось
0 |
1 / 1 / 0 Регистрация: 12.06.2015 Сообщений: 93 |
|
07.09.2016, 21:10 |
8 |
а этот код подойдет для екселя, а не для ворда?
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
07.09.2016, 21:41 |
9 |
Выбор папки и перебор .txt файлов можно использовать и в Excel
0 |
1 / 1 / 0 Регистрация: 12.06.2015 Сообщений: 93 |
|
07.09.2016, 21:45 |
10 |
проблема в вышеперложенных вариантах в том, что открывается путь, но! нет возможности выбрать в ручном режиме подходящий файл по даному пути
0 |
4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
|
07.09.2016, 21:50 |
11 |
Проблема в людях, которые пытаются использовать диалог выбора папки, для указания файла, хотя для последнего есть свои варианты.
0 |
1 / 1 / 0 Регистрация: 12.06.2015 Сообщений: 93 |
|
07.09.2016, 21:57 |
12 |
какие варианты есть?
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||||||
07.09.2016, 22:07 |
13 |
|||||||
Причём в справке есть готовый пример — для выбора .txt файла или
0 |
1 / 1 / 0 Регистрация: 12.06.2015 Сообщений: 93 |
|
07.09.2016, 22:13 |
14 |
спасибо, а можно чтобы автоматически при этом открывалась определенная папка?
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
07.09.2016, 22:30 |
15 |
|||
Для первого варианта ChDrive + ChDir, но если не прокатит, то во втором варианте есть свойство InitialFileName
0 |
Heroes 1 / 1 / 0 Регистрация: 12.06.2015 Сообщений: 93 |
||||
07.09.2016, 22:47 |
16 |
|||
у меня получилось так:
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
07.09.2016, 23:09 |
17 |
|||
Это прокатит только если в момент выполнения макроса текущим будет диск «C» и Вы не откажетесь от выбора файла. Т.е. более универсальным является следующий вариант (хотя и здесь, не помешало бы, проверить указанную папку на наличие)
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.
Ребята, подскажите пожалуйста, как сделать так, чтобы макрос открывал документ Word не свёрнутым, а развёрнутым на весь экран
Код |
---|
Private Sub CommandButton1_Click()Dim objWrdApp As Object Dim objWrdDoc As Object On Error Resume Next Set objWrdApp = GetObject(, "Word.Application") If Err Then Err.Clear Set objWrdApp = CreateObject("Word.Application") If Err Then MsgBox "Нету Ворда на машине!": Exit Sub End If objWrdApp.Visible = True Set objWrdDoc = objWrdApp.Documents.Open("C:DOCUMENTS1.doc") End Sub |
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
Задача заключается вот в чем.
Есть два файла Excel и Word в одной папке. В файле ворда есть шаблон текста с ссылка из ячеек Excel-а.Файл Excel-а открыт а ворд закрыт, в ячейках есть данные которые отражаются в документе ворд. После того как будут изменены данные, надо с помощью кнопки из документа Excel открыть документ ворд и напечатать страницы введенные в макрос кнопки, после чего документ ворд снова закроется.
Как из Excel с помощью макроса открыть файл Word-а и задать параметры для печати.
Открыть так:
Sub Открыть_документ_Word()
'
' Открыть_документ_Word Макрос
' Открыть документ Word из Excel
'
' Сочетание клавиш: Ctrl+d
'
Dim WD
Set WD = CreateObject("Word.Application")
WD.Visible = True
WD.Documents.Open Filename:=Application.ThisWorkbook.Path & "1.doc"
End Sub
- Профессиональные приемы работы в Microsoft Excel
-
►
Обмен опытом -
►
Microsoft Excel -
►
Как из Excel с помощью макроса открыть файл Word
analitica.jimdo.com
Открыть Word из Excel — Макросы в Excel
3-4 минуты
Когда вы работаете в рамках одного приложения, нет необходимости прописывать название приложения. Другое дело работа в нескольких программах.
Чтобы открыть Word из Excel пишем:
‘ запустить Word им сделать его видимым
Set wa = CreateObject(«Word.Application»)
wa.Visible = True
‘ открыть конкретный файл, wd_full_name — полное имя файла, включая путь к нему
Set wd = wa.Documents.Open(wd_full_name)
Теперь любые операции с этим файлом возможны при обращении к нему по заданному нами имени — wd. Например,
wd.Save
wd.Close
Собственно, таким образом можно открыть Word из любого приложения, а не только из Excel. Аналогично обстоит дело и с другими приложениями. Например, вот так открывается Excel.
Set xl = CreateObject(«Excel.Application»)
xl.Visible = True
Set xlfile = xl.Workbooks.Open(xlfile_full_name)
Не забываем определять переменные xl и xlfile (хотя иногда это не приводит к ошибке). Причем лучше определять их не как объекты конкретного класса ( Dim xlfile As Workbook), а как просто абстрактный объект — Dim xlfile AsObject. Практика показывает, что так возникает гораздо меньше ошибок.
Слияние Word и Excel нужно, когда нужно делать много стандартных документов. Создаем шаблон документа, настраиваем слияние, проставляем поля. Теперь заполняем строки в Excel. Создание 10 шаблонных документов потребует от нас следующих действий:
— нажать на стрелку для перехода на нужную строку
— сохранить Word как новый документ в нужную папку
и так 10 раз.
А если нужно сделать 50 документов?
Чтобы не заниматься глупым нажатием на стрелку, можно доверить генерацию макросу (до этого назовем нужный вордовский файл myfile):
With myfile.MailMerge
.MainDocumentType = wdFormLetters
.OpenDataSource Name:=myfile_name, SQLStatement:=»SELECT * FROM `’тут_название_excel-файла$’`», _
ConfirmConversions:=True, ReadOnly:=False, LinkToSource:=True, _
Revert:=False, _
SubType:=wdMergeSubTypeAccess
.ViewMailMergeFieldCodes = False
End With
‘ открываем нужную запись в рассылке, допустим n-ную
myfile.MailMerge.DataSource.ActiveRecord = n
‘ сохраняем в нужную папку
myfile.SaveAs Filename:=myfile_new_name, FileFormat:=wdFormatDocument, LockComments:=False, Password:=»»,addToRecentFiles:=True, WritePassword:=»», ReadOnlyRecommended:=False, EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, SaveAsAOCELetter:=False
myfile.Close
Обратите внимание, что слияние должно быть предварительно настроено. Нет смысла проставлять поля слияния макросом, это долго и неэффективно. Использовать же готовый шаблон можно легко и быстро.