Как открыть Word из Excel макросом VBA? Запуск Word из Excel. Открыть файл word из vba excel
Как открыть Word из Excel макросом VBA? Запуск Word из Excel
Если есть необходимость обратиться к данным, хранящимся в текстовом файле приложения Word, или наоборот, передать данные из Excel в такой файл, то возникнет необходимость запуска приложения, в формате которого сохранен файл. Ниже приведен программный код макроса VBA для Microsoft Excel, запускающий приложение Word.
Макрос, запускающий Word из Excel и открывающий новый документ
Если для передачи данных из 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Макрос для передачи данных из 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Другие материалы по теме:
Как открыть Word из Excel макросом VBA? Запуск Word из Excel
Как открыть Word из Excel макросом VBA? Запуск Word из Excel
Подробности
Категория: Макросы Excel
Опубликовано: 22 июня 2013
Если есть необходимость обратиться к данным, хранящимся в текстовом файле приложения Word, или наоборот, передать данные из Excel в такой файл, то возникнет необходимость запуска приложения, в формате которого сохранен файл. Ниже приведен программный код макроса VBA для Microsoft Excel, запускающий приложение Word.
Макрос, запускающий Word из Excel и открывающий новый документ
Если для передачи данных из 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Макрос для передачи данных из 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Другие материалы по теме:
webhamster.ru
Как открыть Excel из Word макросом VBA? Запуск Excel из Word
Подробности Категория: Макросы Word Опубликовано: 17 октября 2013Если в макросе, написанном для Microsoft Word, требуется обратиться к данным, хранящимся в файле какого-либо другого приложения, например Excel, или наоборот, передать данные из Word в такой файл, то возникает необходимость запуска того приложения, в формате которого сохранен файл. Ниже приведены программные коды макросов VBA для Microsoft Word, запускающие приложение Excel.
Макрос, запускающий Excel и открывающий новую рабочую книгу
Если для передачи данных из Outlook в Excel нужна новая рабочая книга, можно воспользоваться примером кода, приведенного ниже.
Sub Zapusk_Excel_iz_Word1() Dim objXls As Object Set objXls = CreateObject("Excel.Application") objXls.Workbooks.Add objXls.Application.Visible = True Set objXls = Nothing End Sub
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом, нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Макрос, запускающий Excel и открывающий заданный файл
Если же для передачи данных из Outlook в Excel, или наоборот, требуется открытие какого-либо определенного файла, то можно использовать следующий код:
Sub Zapusk_Excel_iz_Word2() Dim objXls As Object Set objXls = CreateObject("Excel.Application") objXls.Workbooks.Open "C:\Test.xlsx" 'укажите путь и имя существующего файла objXls.Application.Visible = True Set objXls = Nothing End SubПри копировании этого кода на свой компьютер, не забудьте изменить путь к файлу. Запуск приложения можно сделать и невидимым, если в коде изменить True на False.
Другие материалы по теме:
macros-vba.ru
Как открыть Word из Excel
Если есть необходимость обратиться к данным, хранящимся в текстовом файле приложения Word, или наоборот, передать данные из Excel в такой файл, то возникнет необходимость запуска приложения, в формате которого сохранен файл. Ниже приведен программный код макроса VBA для Microsoft Excel, запускающий приложение Word.
Макрос, запускающий Word из Excel и открывающий новый документ
Если для передачи данных из 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Другие материалы по теме:
webhamster.ru
vba - КАК УПРАВЛЯТЬ ДОЛЖНЫМ открытым документом Word из excel vba
Я новичок в VBA и, очевидно, что-то не хватает. Мой код работает для открытия слова doc и отправки данных к нему, но НЕ для ДОЛГО ОТКРЫТОГО слова doc. Я продолжаю искать ответ о том, как отправлять информацию из Excel в OPEN Word doc/Bookmark, и ничего не работает.
Я надеюсь, что все в порядке, что я добавил весь код и вызванные функции. Я очень ценю вашу помощь!
Что я до сих пор
Sub ExcelNamesToWordBookmarks() On Error GoTo ErrorHandler Dim wrdApp As Object 'Word.Application Dim wrdDoc As Object 'Word.Document Dim xlName As Excel.Name Dim ws As Worksheet Dim str As String 'cell/name value Dim cell As Range Dim celldata As Variant 'added to use in the test Dim theformat As Variant 'added Dim BMRange As Object Dim strPath As String Dim strFile As String Dim strPathFile As String Set wb = ActiveWorkbook strPath = wb.Path If strPath = "" Then MsgBox "Please save your Excel Spreadsheet & try again." GoTo ErrorExit End If 'GET FILE & path of Word Doc/Dot strPathFile = strOpenFilePath 'call a function in MOD1 If strPathFile = "" Then MsgBox "Please choose a Word Document (DOC*) or Template (DOT*) & try again." 'strPath = Application.TemplatesPath GoTo ErrorExit End If If FileLocked(strPathFile) Then 'Err.Number = 70 if open 'read / write file in use 'do something 'NONE OF THESE WORK Set wrdApp = GetObject(strPathFile, "Word.Application") 'Set wrdApp = Word.Documents("This is a test doc 2.docx") 'Set wrdApp = GetObject(strPathFile).Application Else 'all ok 'Create a new Word Session Set wrdApp = CreateObject("Word.Application") wrdApp.Visible = True wrdApp.Activate 'bring word visiable so erros do not get hidden. 'Open document in word Set wrdDoc = wrdApp.Documents.Open(Filename:=strPathFile) 'Open vs wrdApp.Documents.Add(strPathFile)<=>create new Document1 doc End If 'Loop through names in the activeworkbook For Each xlName In wb.Names If Range(xlName).Cells.Count = 1 Then celldata = Range(xlName.Value) 'do nothing Else For Each cell In Range(xlName) If str = "" Then str = cell.Value Else str = str & vbCrLf & cell.Value End If Next cell 'MsgBox str celldata = str End If 'Get format and strip away the spacing, negative color etc etc 'I know this is not right... it works but not best theformat = Application.Range(xlName).DisplayFormat.NumberFormat If Len(theformat) > 8 Then theformat = Left(theformat, 5) 'was 8 but dont need cents Else 'do nothing for now End If If wrdDoc.Bookmarks.Exists(xlName.Name) Then 'Copy the Bookmark Range. Set BMRange = wrdDoc.Bookmarks(xlName.Name).Range.Duplicate BMRange.Text = Format(celldata, theformat) 'Re-insert the bookmark wrdDoc.Bookmarks.Add xlName.Name, BMRange End If Next xlName 'Activate word and display document With wrdApp .Selection.Goto What:=1, Which:=2, Name:=1 'PageNumber .Visible = True .ActiveWindow.WindowState = wdWindowStateMaximize 'WAS 0 is this needed??? .Activate End With GoTo WeAreDone 'Release the Word object to save memory and exit macro ErrorExit: MsgBox "Thank you! Bye." Set wrdDoc = Nothing Set wrdApp = Nothing Exit Sub 'Error Handling routine ErrorHandler: If Err Then MsgBox "Error No: " & Err.Number & "; There is a problem" If Not wrdApp Is Nothing Then wrdApp.Quit False End If Resume ErrorExit End If WeAreDone: Set wrdDoc = Nothing Set wrdApp = Nothing End Subсбор файлов:
Function strOpenFilePath() As String Dim intChoice As Integer Dim iFileSelect As FileDialog 'B Set iFileSelect = Application.FileDialog(msoFileDialogOpen) With iFileSelect .AllowMultiSelect = False 'only allow the user to select one file .Title = "Please... Select MS-WORD Doc*/Dot* Files" .Filters.Clear .Filters.Add "MS-WORD Doc*/Dot* Files", "*.do*" .InitialView = msoFileDialogViewDetails End With 'make the file dialog visible to the user intChoice = Application.FileDialog(msoFileDialogOpen).Show 'determine what choice the user made If intChoice <> 0 Then 'get the file path selected by the user strOpenFilePath = Application.FileDialog( _ msoFileDialogOpen).SelectedItems(1) Else 'nothing yet End If End Functionпроверять, открыт ли файл...
Function FileLocked(strFileName As String) As Boolean On Error Resume Next ' If the file is already opened by another process, ' and the specified type of access is not allowed, ' the Open operation fails and an error occurs. Open strFileName For Binary Access Read Write Lock Read Write As #1 Close #1 ' If an error occurs, the document is currently open. If Err.Number <> 0 Then ' Display the error number and description. MsgBox "Function FileLocked Error #" & str(Err.Number) & " - " & Err.Description FileLocked = True Err.Clear End If End Function источник поделитьсяqaru.site
Excel VBA для открытия нескольких файлов Word в цикле
Я заранее извиняюсь за вопрос о новичке - большая часть моего опыта VBA находится в Excel или Word в Excel. В этом случае я перехожу из Excel в Word. Я пытаюсь захватить некоторые данные из некоторых форм Word и хранить их в файле Excel.
Сейчас мой код работает для первого документа в папке, но после этого она шланги вверх с ошибкой автоматизации «сервер выдал исключение» (слизи!)
Вот мой код:
Dim objWordApp As Object strCurFileName = Dir(strFilePath) Set objWordApp = CreateObject("word.application") objWordApp.Visible = True Do While strCurFileName <> "" objWordApp.documents.Open strFilePath & strCurFileName objWordApp.activedocument.Unprotect password:="testcode" {EXCEL PROCESSING HERE} strCurFileName = Dir objWordApp.activedocument.Close 0 Loop objWordApp.Quit Set objWordApp = NothingЯ замечаю, что код работает нормально, если я покинул приложение и установил объект = ничего внутри цикла. Но так, как сейчас, он бомбит второй файл в папке «objWordApp.documents.Open strFilePath & strCurFileName».
Можно ли открывать и закрывать документы Word в цикле, не создавая объект снова и снова? Это очень медленно, когда я так делаю.
Спасибо за помощь. Мне нравится ваш путь намного лучше. К сожалению, я получаю тот же результат. Программа умирает во второй раз через петлю на линии, которая гласит:
Set objWordDoc = objWordApp.Documents.Open(objFile.Path)ошибка, что я получаю:
времени выполнения Ошибка -2147417851 (80010105) Ошибка автоматизации Сервер кинул исключение.
Я пробовал ваш код на обычных документах по словам (не те, которые я обрабатываю), и он работал нормально. Документы, которые я запускаю, имеют поля формы и макросы - не уверен, что это имеет значение. Я установил макросохранение в Word как «низкий», так и «очень высокий», чтобы убедиться, что другие макросы не мешают.
Я просто не могу понять, почему он работает для первого документа, а затем не следующего. Я даже клонировал первый документ, но это не имело значения.
По-прежнему не повезло. Единственное, что я могу заставить работать, - это полностью стереть объекты и повторно создавать их каждый раз, когда я хочу открыть файл.
Set objFolder = FSO.GetFolder(strFilePath) For Each objFile In objFolder.Files Set objWordApp = CreateObject("word.application") objWordApp.Visible = True If Right(objFile.Name, 4) = ".doc" Then Set objWordDoc = objWordApp.documents.Open(Filename:=objFile.Path, ConfirmConversions:=False, _ ReadOnly:=True, AddToRecentFiles:=False, PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", Format:=wdOpenFormatAuto) [Process DOC] objWordDoc.Close 0, 1 End If Set objWordDoc = Nothing objWordApp.Quit Set objWordApp = Nothing NextЯ не уверен, почему это работает и почему это не сработает по-другому. Если мне нужно идти по этому маршруту, я могу - это кажется очень медленным и неэффективным. Это плохая идея?
stackoverrun.com
vba - Excel VBA для открытия нескольких файлов Word в цикле
Я заранее извиняюсь за вопрос новичков - большая часть моего опыта VBA находится в Excel или Word в Excel. В этом случае я перехожу из Excel в Word. Я пытаюсь захватить некоторые данные из некоторых форм Word и хранить их в файле Excel.
В настоящий момент мой код работает для первого документа в папке, но после этого он шланги с ошибкой автоматизации "сервер выбрал исключение" (goo!)
Вот мой код:
Dim objWordApp As Object strCurFileName = Dir(strFilePath) Set objWordApp = CreateObject("word.application") objWordApp.Visible = True Do While strCurFileName <> "" objWordApp.documents.Open strFilePath & strCurFileName objWordApp.activedocument.Unprotect password:="testcode" {EXCEL PROCESSING HERE} strCurFileName = Dir objWordApp.activedocument.Close 0 Loop objWordApp.Quit Set objWordApp = NothingЯ замечаю, что код работает нормально, если я выхожу из приложения и не устанавливаю объект = ничего внутри цикла. Но так, как сейчас, он запускает второй файл в папке "objWordApp.documents.Open strFilePath и strCurFileName".
Можно ли открывать и закрывать документы Word в цикле, не создавая объект снова и снова? Это очень медленно, когда я делаю так.
Спасибо за помощь. Мне нравится ваш путь намного лучше. К сожалению, я получаю тот же результат. Программа умирает во второй раз через цикл на строке, которая гласит:
Set objWordDoc = objWordApp.Documents.Open(objFile.Path)Ошибка, которую я получаю:
Ошибка времени выполнения -2147417851 (80010105) Ошибка автоматизации Сервер исключил исключение.
Я пробовал свой код на обычных текстовых документах (а не на тех, которые я обрабатываю), и он работал нормально. Документы, которые я запускаю, имеют поля формы и макросы - не уверен, что это имеет значение. Я установил макросохранение в Word как "низкий", так и "очень высокий", чтобы убедиться, что другие макросы не мешают.
Я просто не могу понять, почему он работает для первого документа, а затем не следующего. Я даже клонировал первый документ, но это не имело значения.
Тем не менее, не удача. Единственное, что я могу заставить работать, - это полностью стереть объекты и повторно создавать их каждый раз, когда я хочу открыть файл.
Set objFolder = FSO.GetFolder(strFilePath) For Each objFile In objFolder.Files Set objWordApp = CreateObject("word.application") objWordApp.Visible = True If Right(objFile.Name, 4) = ".doc" Then Set objWordDoc = objWordApp.documents.Open(Filename:=objFile.Path, ConfirmConversions:=False, _ ReadOnly:=True, AddToRecentFiles:=False, PasswordDocument:="", _ PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _ WritePasswordTemplate:="", Format:=wdOpenFormatAuto) [Process DOC] objWordDoc.Close 0, 1 End If Set objWordDoc = Nothing objWordApp.Quit Set objWordApp = Nothing NextЯ не уверен, почему это работает и почему это не сработает по-другому. Если мне нужно идти по этому маршруту, я могу - это кажется очень медленным и неэффективным. Это плохая идея?
qaru.site