Appword as word application ошибка библиотеки
Нужно открыть документ Ворда из Ехеля…перерыл 400страниц этого сайта…вот ,что нашел…но ничего не работает …не открывает…в чем фокус.
Уважение: +0/-0
Offline
полному пути?
Posted by Chas under Visual Basic, Пост-обзор
а если там шаблон будет не найден, то открывать его в одной папке где сам файл excel?
EducatedFool
Set oWord = CreateObject("Word.Application")
If Dir("C:\моя папка\" & Filename$) <> "" Then Set oDoc = oWord.Documents.Add("C:\моя папка\" & Filename$)
If Dir(ThisWorkbook.Path & Filename$) <> "" Then Set oDoc = oWord.Documents.Add(ThisWorkbook.Pa th & "\" & Filename$)
If oDoc Is Nothing Then MsgBox "Файл " & Filename$ & " не найден!", vbCritical, "Нет шаблона": Exit Sub
Ваши желания
End Sub
Sub FillingWordFile()
Dim WD
Dim XL As Excel.Application
Set WD = CreateObject("Word.Application")
WD.Visible = True
WD.Documents.Open Filename:=Application.ThisWorkbook. Path & "\название файла.doc"
Range("адрес ячейки").Copy
WD.ActiveDocument.Bookmarks.Item("н азвание закладки").Range.Paste
End Sub
-----------------------------------------------------------------
Из всего этого выбираю такой код….открытия документа Ворд из Ехеля…но ничего не открывается …в чем может быть причина?
Sub МакросОткрытияДокуиента()
'
' МакросОткрытияДокуиента
'Dim AppWord As Word.Application
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
AutoOpen = " C:\Documents and Settings\т\Мои документы\ Макрос переноса 1 строки.docx"
AppWord.Documents.Add
End Sub
--------------------------------------------------------------------
и этот вариант пробую … но ничего не открывается…
Sub Макрос ОТКРЫТИЯшаблона()
Set oWord = CreateObject("Word.Application")
If Dir("C:\ Documents and Settings\т\Рабочий стол\КОНДУИТ \" & Filename$) <> "" Then Set oDoc = oWord.Documents.Add("C:\ Documents and Settings\т\Рабочий стол\КОНДУИТ \" & Filename$)
If Dir(ThisWorkbook.Path & Filename$) <> "" Then Set oDoc = oWord.Documents.Add(ThisWorkbook.Pa th & "\" & Filename$)
If oDoc Is Nothing Then MsgBox "Файл " & Filename$ & " не найден!", vbCritical, "Нет шаблона": Exit Sub
В VBA для Word не обнаружил событие сохранения документа. Вот в VBA для Excel есть событие Workbook_BeforeSave. Как быть?
Защита документа word. (без сохранения, без копирования)
Доброго времени суток. Хочу сначала поблагодарить участников форума за помощь в моим предыдущих.
VBA Word. Макрос для сохранения слияния
Всем привет! всю историю описывать не буду. но на текущем этапе у меня есть файл в экселе.
Как указать Word'у каталог для сохранения файлов
Открываю документ, выполняя 'Save As..' сохраняю документ в другом каталоге, закрываю Word. .
Ошибка сохранения документа WORD
Всем привет! Работаю над созданием отчёта в WORD, и столкнулся с такой ошибкой: после добавления 5.
DocumentBeforeSave Event
Occurs before any open document is saved.
object An object of type Application declared with events in a class module. For more information about using events with the Application object, see Using Events with the Application Object.
Doc The document that's being saved.
SaveAsUI True to display the Save As dialog box.
Cancel False when the event occurs. If the event procedure sets this argument to True, the document isn't saved when the procedure is finished.
Example
This example prompts the user for a yes or no response before saving any document. This code must be placed in a class module, and an instance of the class must be correctly initialized in order to see this example work; see Using Events with the Application Object for directions on how to accomplish this.
Спасибо.
Пробую object_DocumentBeforeSave, appWord_DocumentBeforeSave и просто DocumentBeforeSave, событие не срабатывает. Ведь в Excel'е до Workbook_BeforeSave ничего не нужно было писать. Может просветите что нужно писать вместо object для текущего документа?
Using Events with the Application Object
To create an event handler for an event of the Application object, you need to complete the following three steps:
1. Declare an object variable in a class module to respond to the events.
2. Write the specific event procedures.
3. Initialize the declared object from another module.
Declare the Object Variable
Before you can write procedures for the events of the Application object, you must create a new class module and declare an object of type Application with events. For example, assume that a new class module is created and called EventClassModule. The new class module contains the following code.
Write the Event Procedures
After the new object has been declared with events, it appears in the Object drop-down list box in the class module, and you can write event procedures for the new object. (When you select the new object in the Object box, the valid events for that object are listed in the Procedure drop-down list box.) Select an event from the Procedure drop-down list box; an empty procedure is added to the class module.
Initialize the Declared Object
Before the procedure will run, you must connect the declared object in the class module (App in this example) with the Application object. You can do this with the following code from any module.
Run the Register_Event_Handler procedure. After the procedure is run, the App object in the class module points to the Microsoft Word Application object, and the event procedures in the class module will run when the events occur.
Приносим извинения. Запрошенное содержимое было удалено. Вы будете автоматически перенаправлены через 1 секунду.
Спрашивающий
Вопрос
Can someone explaine the difference between
Dim appWord As Word.Application
Set appWord = CreateObject("Word.Application")
Set appWord = New Word.Application
Set appWord = GetObject(, "Word.Application")
Все ответы
Can someone explaine the difference between
Dim appWord As Word.Application
Set appWord = CreateObject("Word.Application")
Set appWord = New Word.Application
Set appWord = GetObject(, "Word.Application")
The first two -- CreateObject and New Word.Application -- both create a new instance of the Word application object and assign that to appWord. The last one, GetObject, locates an existing instance of Word -- that is, a Word application object that is already open -- and assigns that to appWord.
The difference between the first two is that CreateObject doesn't require you to have a reference to the Word object library, while "Set appWord = New Word.Application" does require a reference to Word in order for "Word.Application" to be understood.
> The difference between the first two is that CreateObject doesn't require you to have a reference to the Word object library, while "Set appWord = New Word.Application" does require a reference to Word in order for "Word.Application" to be understood.
This is called late binding versus early binding. The reason this is important is if the Word functionality is a minor aspect of the overall app, and some users may not have Word installed. In that case you can test if Word is there with GetObject/CreaeteObject, and if not, then "gracefully degrade" the application. In the case of early binding Word MUST be available for the application to start, even if user never runs the Word functionality.
-Tom. Microsoft Access MVP
- Изменено Tom van Stiphout (MVP) MVP 16 октября 2016 г. 20:00
- Предложено в качестве ответа ryguy72 18 октября 2016 г. 14:44
That also means that with late binding you don't need to dimention a variable
Dim appWord As Word.Application
And how can we detect if word is available?
That also means that with late binding you don't need to dimention a variable
Dim appWord As Word.Application
And how can we detect if word is available?
You still have to declare a variable, but you would just declare it as Object, which doesn't require any particular object library:
Dim appWord As Object
You can detect whether Word is installed by trying to create an instance of the Word application and trapping the error that is raised if the object can't be created. For example:
Dim appWord As Object
Dim lngError As Long
On Error Resume Next
Set appWord = CreateObject("Word.Application")
lngError = Err.Number
On Error GoTo 0 ' or your own error handler
If lngError <> 0 Then
MsgBox "Unable to create Word application. Is Word installed?"
Else
' Go ahead and work with the Word application referenced by appWord.
End If
If you want to run code in one Microsoft Office application that works with the objects in another application, follow these steps.
To run the code
Set a reference to the other application's type library in the References dialog box (Tools menu). Then, the objects, properties, and methods will appear in the Object Browser and the syntax will be checked at compile time. You can also get context-sensitive Help on them.
Declare object variables that will refer to the objects in the other application as specific types. Qualify each type with the name of the application that is supplying the object. For example, the following statement declares a variable that points to a Microsoft Word document and another that refers to a Microsoft Excel workbook.
Note You must follow the preceding steps if you want your code to be early bound.
Use the CreateObject function with the OLE Programmatic Identifiers of the object you want to work with in the other application, as shown in the following example. To see the session of the other application, set the Visible property to True.
Apply properties and methods to the object contained in the variable. For example, the following instruction creates a new Word document.
When finished working with the other application, use the Quit method to close it, and then set its object variable to Nothing to free any memory it is using, as shown in the following example.
About the Contributors
Dennis Wallentin is the author of VSTO & .NET & Excel, a blog that focuses on .NET Framework solutions for Excel and Excel Services. Dennis has been developing Excel solutions for over 20 years and is also the coauthor of "Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA and .NET (2nd Edition)."
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Я использую Word из Excel, чтобы открывать документы и обновлять в них ссылки.
Сначала Word открывал и открывал документы, но я получил ошибку в строке:
После попытки просто снять флажок, а затем еще раз проверить ссылку «Microsoft Word», У меня также была такая же ошибка: Set oW = VBA.GetObject(, 'Word.Application') а также Set oW = VBA.CreateObject('Word.Application')
И все же объявления переменных вроде oW As Word.Application похоже, не вызывает никаких проблем .
Тесты для решения проблемы
Тест 1. Добавление ссылки в библиотеку вручную
Я хотел попробовать следующее:
- В проекте VB посмотрите, где находится файл ссылки "Microsoft Word". (для меня, C:\Program Files (x86)\Common Files\microsoft shared\OFFICE15\MSWORD.OLB )
- Убрать ссылку на «Microsoft Word»
- Закройте и сохраните проект
- Перейдите в папку ссылки на файл и запустите regsvr32 MSWORD.OLB в консоли
- Снова откройте проект, повторно добавьте ссылку на «Microsoft Word»
Но в то же время (от 1. до 4.) ссылка на файл MSWORD.OLB исчез. о_О
Я перезагрузился и проверил, и мои скрытые файлы видны, поэтому я просто не знаю, что делать . Есть ли другой способ восстановить библиотеку? Или заставить его загрузить?
Я снова перезагрузился, и на этот раз путь ссылки изменился на C:\Program Files (x86)\Microsoft Office\Office15\MSWORD.OLB , значит, ссылка работает, но у меня та же ошибка в тех же строках.
По всей видимости regsvr32 онт работает для DLL а также OCX , поэтому мне не удалось добавить ссылку вручную.
Тест 2: Восстановить установку Office
Я восстановил установку Office, но та же проблема в тех же строках .
Тест 3. Начните с cmd и добавьте в переменную среды PATH
Как предложил @S Meaden, я попытался открыть Word из командной строки:
Случайным путем: winword.exe /automation , winword.exe , winword /automation а также winword сказать 'winword.exe.' is not recognised Но start winword а также start winword /automation работать плавно.
я пытался 'C:\Program Files (x86)\Microsoft Office\Office15\winword.exe' /r для принудительной регистрации, но это ничего не изменило .
И по правильному пути: Все команды работают без сбоев!
Затем я добавил путь C:\Program Files (x86)\Microsoft Office\Office15\ в переменную среды PATH: После этого все команды работают, но я все равно получаю ту же ошибку в VBA .
Тест 4. Реестр Windows и другие версии Office
У меня на компьютере только одна версия MS Office, и она не обновлялась или что-то в этом роде.
Я все еще проверяю Реестр Windows конечно, но нет никаких ссылок на другие версии!
Я только что нашел значение политики, указанное для версии 14 (у меня 15, Office 2013), поэтому я сделал резервную копию и удалил ее. Но без изменений, поэтому добавляю заново!
Тест 5: принудительная регистрация из cmd
Я пытался принудительно зарегистрировать как Excel, так и Word с помощью:
но это ничего не изменило .
Тест 6
Все еще ищу тонкости, чтобы попробовать .
Вопрос
Ссылка снова указывает на существующий файл, Word по-прежнему полностью функционален но мой код, который работал вчера, теперь дает ошибку:
Кто-нибудь знает способ обхода?
Simple WorkAround (не исправлено)
Просто использование Late Binding, кажется, помогает мне, поэтому, даже если мне интересно, почему, я просто рад, что эта работа снова работает!
Итак, теперь мои объявления выглядят так:
- Может быть, попробовать восстановить установку Office? Обратите внимание, что на моем компьютере файл находится в папке «C: \ Program Files (x86) \ Microsoft Office \ root \ Office16 \», а не в указанной вами папке.
- @VincentG: Спасибо за ввод, я попробовал (см. Правки), но я не исправил ошибки . Ссылка есть и, похоже, работает, поскольку объявление переменных не вызывает никаких ошибок. И все же до сих пор не удается запустить код, который работал раньше . /
- 1 Можете ли вы зайти в командную строку и попробовать winword.exe /automation ? Вот как запускается exe при создании экземпляра COM.
- @SMeaden: случайным образом winword.exe /automation , winword.exe , winword /automation а также winword сказать 'winword.exe.' не признается, но start winword а также start winword /automation работать плавно. я пытался 'C:\Program Files (x86)\Microsoft Office\Office15\winword.exe' /r принудительно выполнить регистрацию, но это ничего не изменило . И при правильном пути все команды выполняются без сбоев! Затем я добавил путь C:\Program Files (x86)\Microsoft Office\Office15\ в переменную среды PATH, поэтому все команды работают, но я все равно получаю ту же ошибку в VBA . / T_T
- @ R3uk: хорошо, давайте не будем использовать случайные пути, давайте использовать детерминированный путь, я обновил свое замечание до более подробного ответа ниже.
Хорошо, позвольте мне формализовать некоторые советы, данные в комментариях. Итак, нам нужно проверить вашу сантехнику COM. Когда вы создаете COM-объект с VBA.CreateObject('Word.Application') есть последовательность событий, сосредоточенная в реестре, и вы должны дважды проверить, используя RegEdit .
N.B. Я использую Windows 8.1, и у меня Word версии 15, у вас может быть другая.
Сначала строка просматривается в подулье. HKEY_CLASSES_ROOT , и я могу найти здесь фрагмент реестра, демонстрирующий
[На самом деле мы можем это указать VBA.CreateObject('Word.Application') а также VBA.CreateObject('Word.Application.15') должны разрешить то же самое.] Отсюда мы имеем CLSID для приложения Word это . Так что теперь я иду искать этот ключ.
Я ищу CLSID во-первых под HKEY_CLASSES_ROOT\CLSID где в 32-битном мире можно найти все классы, но его там нет, потому что для меня это 64-битный альтернативный ключ, HKEY_CLASSES_ROOT\Wow6432Node\CLSID\
Вы должны найти CLSID либо под 32-битным ключом, либо под 64-битным ключом. Под этим ключом вы должны найти несколько подключей, самый важный из которых LocalServer32 и путь к исполняемому файлу сервера (который для Word совпадает с исполняемым файлом пользовательского приложения) находится там. Для меня это
Итак, теперь из командной строки я могу запустить тестовый запуск Word с помощью COM.
Вам следует проследить ту же цепочку вызовов и разрешить любые проблемы. Пожалуйста, оставьте отзыв.
Если это сработает, проверьте объявление переменной. Поэкспериментируйте и посмотрите, изменилось ли поведение / ошибка, если в одном случае используется раннее связывание, а в другом - позднее связывание.
ОБНОВЛЕНИЕ: я искал ваш номер ошибки в Google, но вы получите гораздо лучшие результаты, если используете его шестнадцатеричный эквивалент 8002801D, множество ссылок для просмотра там,
Ошибка Google 8002801D
Итак, мы различаемся по расположению MSWORD.OLB мой находится в (как и другие комментаторы, Винсент Джи)
Читайте также: