Word библиотека не зарегистрирована

  • Remove From My Forums
  • Вопрос

  • В своем приложении (C# .NET) я запускаю Word, создаю в нем новый документ, заполняю его и сохраняю с последующим
    открытием:

    using word = Microsoft.Office.Interop.Word;
     
    //...
     
    word.Application wordapp = null;
    word.Document worddoc = null;
     
    wordapp = new word.Application();
    worddoc = wordapp.Documents.Add();
    wordapp.DisplayAlerts = word.WdAlertLevel.wdAlertsNone;
     
    //...
     
    worddoc.SaveAs(ref fileName);
    wordapp.Visible = true;

    В проекте подключена ссылка Microsoft.Office.Interop.Word версии 14.0.0.0.
    У меня установлен Office 2019 и в нем все работает. У других пользователей с более ранними версиями
    Word тоже все работает, но у одного пользователя постоянно выскакивает шибка «Библиотека не зарегистрирована». Раньше я грешил на то, что у него был установлен Word 2007, но я у себя установил такой же Office и не получил подобной ошибки. Недавно
    ему установили Word 2010, но эта ошибка все равно осталась. Все, что я смог выяснить в интернете, это то, что эта ошибка говорит о том, что на компьютере не установлен Word или он установлен криво. Этот вариант я исключаю, так как у
    него свежеустановленный Word. Какие еще могут быть причина подобной ошибки?

  • Remove From My Forums
  • Question

  • Hi,

    I have a problem with the Microsoft.Office.Interop.Word library (version:11.0.0.0). I add the library as reference to my project in VS2008 Framework 3.5 SP1 to open a Word 2003 file.

    This is a sample code that i’m using:

    //some code before.....
    
    
    ApplicationClass wordapp = new
     ApplicationClass();
    //docName is the file path
    
    Document worddoc = wordapp.Documents.Open(ref
     docName, ref
     missingValue, ref
     missingValue, 
                        ref
     missingValue, ref
     missingValue,ref
     missingValue,ref
     missingValue, ref
     missingValue,
                        ref
     missingValue, ref
     missingValue, ref
     missingValue, ref
     missingValue,ref
     missingValue,
                        ref
     missingValue, ref
     missingValue, ref
     missingValue);
    
    //some code after ...
    
    

    When i try to use the «Open» method it raise an exception which is

    Unable to cast COM object of type ‘Microsoft.Office.Interop.Word.ApplicationClass’ to interface type ‘Microsoft.Office.Interop.Word._Application’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{00020970-0000-0000-C000-000000000046}’ failed due to the following error: Library not registered. (Exception from HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED)).

    I tried to solve it in so many ways but i can’t find the solution.

    Please,i need your help!

    Thank you so much.

    P.S. If you need more informations (settings and so on)…tell me!

Answers

  • I’ve just re-installed VS 2008 and Office 2003.

    I don’t know why but now it works,maybe there was something wrong in one of those.

    Thanks for the support.bye

    • Marked as answer by

      Monday, April 12, 2010 4:17 PM

Same problem here.
I think he uninstalled the Microsoft Office 2007 primary interop assemblies. After I uninstalled that, it worked again…

John.Austi wrote:

Dear Jialiang,winword.exe /r did not solve the problem.
16-Aug-07

Dear Jialiang,

winword.exe /r did not solve the problem.

Our program is compiled with a reference to the word 2000 dll as we still
have some users with Word 2000, however it works on other machines with 2003
(including mine).

The customer uninstalled «some program with 2007 in the name» and the
problem is now fixed!

Thanks for your assistance — I wish I knew what he uninstalled!


John Austin

:

Previous Posts In This Thread:

‘Library not registered’ error creating word.application
On a customers site, one computer with Word 2003 raises an error when our
application tries to create a Word.Application object. The VB6 line ‘ Set wd
= New Word.Application’
gives error -2147319779 Automation error Library not registered.

I saw an article that used regtlib to register the Msword.olb library, but
the regtlib.exe file did not exist in the user’s Windows folder. I tried
copying regtlib from my PC to his and re-registering Msword.olb — it said
that it was registered, but still the application fails.

My customer has now told me that Office 2007 was previously installed on the
PC and was removed and replaced with Office 2003. Has this a bearing on the
problem?

How can I diagnose and fix this issue?

Many thanks,

John Austin

RE: ‘Library not registered’ error creating word.application
Hello John,

From your post, my understanding on this issue is: you get the error:
2147319779 when the vb6 code runs to Set wd = New Word.Application. Office
2007 was once installed on the pc, then it was removed and replaced with
office 2003. If I’m off base, please feel free to let me know.

As we know, the error 2147319779 means ‘Library not registered’ according
to the KB article http://support.microsoft.com/kb/186063. Because the pc
was once installed with Office 2007, my suggestion is:
Tools->References). Has it referenced to the correct Word library:
Microsoft Word 11.0 Object Library? (11.0 is the current version of Word in
your computer)
Word 2003 dlls. You may go to Start: Run, and type:
c:path to your word 2003Winword.exe /r
This will cause Word to rewrite all of its registry keys with their default
values. When you’ve done that, double check the Word reference in the vb
project, then try the code again.

If both the suggestions cannot help to resolve the problem, would you tell
me the type of your customer’s site? Is it a Retail Solution Site?

Sincerely,
Jialiang Ge ([email protected], remove ‘online.’)
Microsoft Online Community Support

==================================================
For MSDN subscribers whose posts are left unanswered, please check this
document: http://blogs.msdn.com/msdnts/pages/postingAlias.aspx

Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications. If you are using Outlook Express/Windows Mail, please make sure
you clear the check box «Tools/Options/Read: Get 300 headers at a time» to
see your reply promptly.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided «AS IS» with no warranties, and confers no rights.

Dear Jialiang,winword.exe /r did not solve the problem.
Dear Jialiang,

winword.exe /r did not solve the problem.

Our program is compiled with a reference to the word 2000 dll as we still
have some users with Word 2000, however it works on other machines with 2003
(including mine).

The customer uninstalled «some program with 2007 in the name» and the
problem is now fixed!

Thanks for your assistance — I wish I knew what he uninstalled!


John Austin

:

Hey ThereI had the same problem.
Hey There

I had the same problem. And when I removed ???Microsoft Office 2007 Primary
Interop Assemblies??? via the Control panel the error disappeared. Thanks for
pointing me in the right direction.

Steffen

:

RE: ‘Library not registered’ error creating word.application
It worked for me too :)
Thanks for finding a solution.

ZeXr0

:

Re: ‘Library not registered’ error creating word.application
wrote:

Many thanks for this it helped me too

Peter

Submitted via EggHeadCafe — Software Developer Portal of Choice
NoSQL, MongoDB Install, Lotus Notes, and CouchDB
http://www.eggheadcafe.com/tutorial…725-3e1c27969596/nosql-mongodb-install-l.aspx

контекст

Я использую Word из Excel для открытия документов и обновления ссылок в них.

Сначала Word открывал и открывал документы, но я получил сообщение об ошибке:

For Each aField In oDoc.Fields

После попытки просто снять отметку, а затем снова проверьте ссылку «Microsoft Word»,
У меня тоже была такая же ошибка на:
Set oW = VBA.GetObject(, "Word.Application") а также
Set oW = VBA.CreateObject("Word.Application")

И все же объявления переменных вроде oW As Word.Application кажется, не вызывает никаких проблем…

Dim oW As Word.Application, _
    oDoc As Word.Document, _
    aField As Word.Field, _
    aIs As Word.InlineShape, _
    aSh As Word.Shape, _
    fCt As Integer, _
    isCt As Integer, _
    i As Integer, _
    NewFile As String, _
    TotalType As String

On Error Resume Next
Set oW = VBA.GetObject(, "Word.Application") '<-- Error after trying
On Error GoTo 0
If oW Is Nothing Then Set oW = VBA.CreateObject("Word.Application") '<-- Error after trying

NewFile = Dir(FolderToScan & "*." & FileExtensionWOpoint)

Do While NewFile <> vbNullString
    Set oDoc = oW.Documents.Open(FolderToScan & NewFile)
    fCt = oDoc.Fields.Count
    isCt = oDoc.InlineShapes.Count

    For Each aField In oDoc.Fields    '<-- 1st error

Err.Number = -2147319779
Err.HelpContext = 1000440
Err.Description = Ошибка автоматизации — библиотека не зарегистрирована.
Err.Source = VBAProject
Err.HelpFile = C: PROGRA ~ 2 COMMON ~ 1 MICROS ~ 1 VBA VBA7.1 1036 VbLR6.chm
Err.LastDllError = 0


Тесты для решения проблемы

Тест 1: вручную добавить ссылку на библиотеку

Я хотел попробовать следующее:

  1. В проекте VB посмотрите, где находится файл для ссылки «Microsoft Word».
    (для меня, C:Program Files (x86)Common Filesmicrosoft
    sharedOFFICE15MSWORD.OLB
    )
  2. Удалить ссылку на «Microsoft Word»
  3. Закрыть и сохранить проект
  4. Перейдите в папку ссылки на файл и запустите regsvr32 MSWORD.OLB в консоли
  5. Повторно откройте проект, повторно добавьте ссылку на «Microsoft Word»

Но в то же время (между 1. и 4.), ссылка на файл MSWORD.OLB исчез!!!! о_О

Я перезагрузился и проверил, и мои скрытые файлы видны, так что я просто не знаю, что делать!!!
Есть ли другой способ восстановить библиотеку? Или заставить его загружать?

Я снова перезагрузился, и на этот раз путь ссылки изменился на C:Program Files (x86)Microsoft OfficeOffice15MSWORD.OLBТаким образом, ссылка, кажется, работает, но у меня та же ошибка в тех же строках.

По-видимому regsvr32 онлт работает на DLL а также OCX, поэтому я не мог вручную добавить ссылку.

Тест 2: Ремонт офисной установки

Я восстановил установку 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 OfficeOffice15winword.exe" /r заставить регистрацию, но это ничего не изменило…

И на правильном пути:
Все команды работают без сбоев!

Затем я добавил путь C:Program Files (x86)Microsoft OfficeOffice15 в переменную окружения PATH:
После этого все команды работают, но я все равно получаю ту же ошибку в VBA…

Тест 4: реестр Windows и другие версии Office

У меня есть только одна версия MS Office на моем компьютере, и она не обновлялась или что-то еще.

Я все еще проверяю в реестре Windows, чтобы быть уверенным, но нет никакой ссылки на любую другую версию!

Я только что нашел значение Политики, на которое ссылались для версии 14 (у меня 15, Office 2013), поэтому я создал его и удалил. Но без изменений, поэтому я снова добавлю это!

Тест 5: принудительная регистрация из cmd

Я попытался принудительно зарегистрировать Excel и Word:

"C:Program Files (x86)Microsoft OfficeOffice15winword.exe" /r
"C:Program Files (x86)Microsoft OfficeOffice15winword.exe" /regserver
"C:Program Files (x86)Microsoft OfficeOffice15excel.exe" /r
"C:Program Files (x86)Microsoft OfficeOffice15excel.exe" /regserver

но это ничего не изменило…

Тест 6

Все еще ищу что-нибудь, чтобы попробовать…


Вопрос

Ссылка снова указывает на существующий файл,
Слово все еще полностью функционально
но мой код, который работал вчера, теперь содержит ошибку:

Set oW = VBA.GetObject(, "Word.Application")
Set oW = VBA.CreateObject("Word.Application")

Err.Number = -2147319779
Err.HelpContext = 1000440
Err.Description = Ошибка автоматизации — библиотека не зарегистрирована.
Err.Source = VBAProject
Err.HelpFile = C: PROGRA ~ 2 COMMON ~ 1 MICROS ~ 1 VBA VBA7.1 1036 VbLR6.chm
Err.LastDllError = 0

Кто-нибудь знает способ обойти?


Простой WorkAround (не исправлено)

Мне кажется, что использование Late Binding помогает мне, но даже если мне интересно, почему, я просто рад этой работе снова!

Теперь мои объявления выглядят так:

Dim oW As Object, _
    oDoc As Object, _
    aField As Object, _
    aIs As Object, _
    aSh As Object, _
    fCt As Integer, _
    isCt As Integer, _
    i As Integer, _
    NewFile As String, _
    TotalType As String
'' Instead of :
'Dim oW As Word.Application, _
    oDoc As Word.Document, _
    aField As Word.Field, _
    aIs As Word.InlineShape, _
    aSh As Word.Shape, _
    fCt As Integer, _
    isCt As Integer, _
    i As Integer, _
    NewFile As String, _
    TotalType As String

Контекст

Я использую Word из Excel, чтобы открывать документы и обновлять в них ссылки.

Сначала Word открывал и открывал документы, но я получил ошибку в строке:

For Each aField In oDoc.Fields

После попытки просто снять флажок, а затем еще раз проверить ссылку «Microsoft Word»,
у меня также была такая же ошибка:
Set oW = VBA.GetObject(, "Word.Application") и
Set oW = VBA.CreateObject("Word.Application")

И все же объявления таких переменных, как oW As Word.Application, похоже, не вызывают никаких проблем …

Dim oW As Word.Application, _
    oDoc As Word.Document, _
    aField As Word.Field, _
    aIs As Word.InlineShape, _
    aSh As Word.Shape, _
    fCt As Integer, _
    isCt As Integer, _
    i As Integer, _
    NewFile As String, _
    TotalType As String

On Error Resume Next
Set oW = VBA.GetObject(, "Word.Application") '<-- Error after trying
On Error GoTo 0
If oW Is Nothing Then Set oW = VBA.CreateObject("Word.Application") '<-- Error after trying

NewFile = Dir(FolderToScan & "*." & FileExtensionWOpoint)

Do While NewFile <> vbNullString
    Set oDoc = oW.Documents.Open(FolderToScan & NewFile)
    fCt = oDoc.Fields.Count
    isCt = oDoc.InlineShapes.Count

    For Each aField In oDoc.Fields    '<-- 1st error

Err.Number = -2147319779
Err.HelpContext = 1000440
Err.Description = Ошибка автоматизации — Библиотека не зарегистрирована.
Err.Source = VBAProject
Err.HelpFile = C: PROGRA ~ 2 COMMON ~ 1 MICROS ~ 1 VBA VBA7.1 1036 VbLR6.chm
Err.LastDllError = 0


Тесты для решения проблемы

Тест 1. Добавьте ссылку в библиотеку вручную

Я хотел попробовать следующее:

  1. В проекте VB посмотрите, где находится файл для справки «Microsoft Word» это
    (для меня C: Program Files (x86) Common Files microsoft общий OFFICE15 MSWORD.OLB )
  2. Убрать ссылку на «Microsoft Word»
  3. Закройте и сохраните проект
  4. Перейдите в папку ссылки на файл и запустите regsvr32 MSWORD.OLB в консоли.
  5. Снова откройте проект, повторно добавьте ссылку на «Microsoft Word»

Но тем временем (между 1. и 4.) ссылка на файл MSWORD.OLB исчезла !!!! o_O

Я перезагрузился и проверил, мои скрытые файлы видны, поэтому я просто не знаю, что делать !!!
Есть ли другой способ восстановить библиотеку? Или принудительно загрузить?

Я снова перезагрузился, и на этот раз путь ссылки изменился на C:Program Files (x86)Microsoft OfficeOffice15MSWORD.OLB, поэтому ссылка, похоже, работает, но у меня та же ошибка в тех же строках.

Очевидно, regsvr32 onlt работает для 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 OfficeOffice15winword.exe" /r принудительно зарегистрировать, но ничего не изменилось …

И на правильном пути:
Все команды работают без сбоев!

Затем я добавил путь C:Program Files (x86)Microsoft OfficeOffice15 в переменную среды PATH:
После этого все команды работают, но я все равно получаю ту же ошибку в VBA …

Тест 4. Реестр Windows и другие версии Office

У меня только одна версия MS Office на моем компьютере, и она не обновлялась или что-то в этом роде.

Я все еще проверяю реестр Windows , чтобы убедиться, но нет никаких ссылок на другие версии!

Я только что нашел значение политики, на которое ссылались для версии 14 (у меня 15, Office 2013), поэтому я сделал резервную копию и удалил ее. Но без изменений, поэтому добавляю заново!

Тест 5. Принудительная регистрация из cmd

Я пытался принудительно зарегистрировать как Excel, так и Word с помощью:

"C:Program Files (x86)Microsoft OfficeOffice15winword.exe" /r
"C:Program Files (x86)Microsoft OfficeOffice15winword.exe" /regserver
"C:Program Files (x86)Microsoft OfficeOffice15excel.exe" /r
"C:Program Files (x86)Microsoft OfficeOffice15excel.exe" /regserver

Но это ничего не изменило …

Тест 6

Все еще ищу тонкости, чтобы попробовать …


Вопрос

Ссылка снова указывает на существующий файл,
Word по-прежнему полностью функционален
, но мой код, который работал вчера, теперь дает ошибку:

Set oW = VBA.GetObject(, "Word.Application")
Set oW = VBA.CreateObject("Word.Application")

Err.Number = -2147319779
Err.HelpContext = 1000440
Err.Description = Ошибка автоматизации — Библиотека не зарегистрирована.
Err.Source = VBAProject
Err.HelpFile = C: PROGRA ~ 2 COMMON ~ 1 MICROS ~ 1 VBA VBA7.1 1036 VbLR6.chm
Err.LastDllError = 0

Кто-нибудь знает способ обхода?


Simple WorkAround (не исправлено)

Просто использование Late Binding, кажется, помогает мне, поэтому, даже если мне интересно, почему, я просто рад, что эта работа снова работает!

Итак, теперь мои объявления выглядят так:

Dim oW As Object, _
    oDoc As Object, _
    aField As Object, _
    aIs As Object, _
    aSh As Object, _
    fCt As Integer, _
    isCt As Integer, _
    i As Integer, _
    NewFile As String, _
    TotalType As String
'' Instead of :
'Dim oW As Word.Application, _
    oDoc As Word.Document, _
    aField As Word.Field, _
    aIs As Word.InlineShape, _
    aSh As Word.Shape, _
    fCt As Integer, _
    isCt As Integer, _
    i As Integer, _
    NewFile As String, _
    TotalType As String

Хорошо, позвольте мне формализовать некоторые советы, данные в комментариях. Итак, нам нужно проверить вашу сантехнику COM. Когда вы создаете COM-объект с помощью VBA.CreateObject("Word.Application"), существует последовательность событий, сосредоточенная в реестре, и вам следует дважды проверить, используя RegEdit.

N.B. Я использую Windows 8.1, и мой Word — 15-й версии, ваш может быть другим.

Сначала ищется строка в разделе под кустом HKEY_CLASSES_ROOT, и я могу найти здесь фрагмент реестра, демонстрирующий

[HKEY_CLASSES_ROOTWord.Application]
@="Microsoft Word Application"

[HKEY_CLASSES_ROOTWord.ApplicationCLSID]
@="{000209FF-0000-0000-C000-000000000046}"

[HKEY_CLASSES_ROOTWord.ApplicationCurVer]
@="Word.Application.15"

[Так что на самом деле мы можем, что это означает, что VBA.CreateObject("Word.Application") и VBA.CreateObject("Word.Application.15") должны разрешить то же самое.] Отсюда у нас есть CLSID для приложения Word, это {000209FF-0000-0000-C000-000000000046}. Так что теперь я иду искать этот ключ.

Я ищу CLSID сначала в HKEY_CLASSES_ROOTCLSID, где в 32-битном мире все классы будут найдены, но его там нет, потому что для меня это 64-битный альтернативный ключ, HKEY_CLASSES_ROOTWow6432NodeCLSID

Вы должны найти CLSID либо под 32-битным ключом, либо под 64-битным ключом. Под этим ключом вы должны найти несколько подключей, важнейший из которых — LocalServer32, и путь к исполняемому файлу сервера (который для Word совпадает с исполняемым файлом пользовательского приложения). Для меня это

[HKEY_CLASSES_ROOTWow6432NodeCLSID{000209FF-0000-0000-C000-000000000046}LocalServer32]
@="C:\Program Files\Microsoft Office 15\Root\Office15\WINWORD.EXE /Automation"

Итак, теперь я могу запустить из командной строки, чтобы протестировать запуск Word с помощью COM.

C:Program FilesMicrosoft Office 15RootOffice15WINWORD.EXE /Automation

Вам следует проследить ту же цепочку вызовов и разрешить любые проблемы. Пожалуйста, оставьте отзыв.

Если это сработает, проверьте объявление переменной. Поэкспериментируйте и посмотрите, изменилось ли поведение / ошибка, если в одном случае используется раннее связывание, а в другом — позднее связывание.

ОБНОВЛЕНИЕ: я нашел ваш номер ошибки в Google, но вы получите гораздо лучшие результаты, если используете его шестнадцатеричный эквивалент 8002801D, множество ссылок для просмотра там,

Ошибка Google 8002801D

Хорошо, из вашего комментария, рад, что поздняя привязка работает, это доказывает этот аспект подключения COM и возлагает вину на библиотеку типов как интуитивно понятную из сообщения об ошибке. Я рад, что у нас такая же версия, поэтому мы можем поделиться еще одним фрагментом реестра. Таким образом, библиотеки типов, которые появляются в диалоговом окне Инструменты-> Ссылки в VBA IDE, основаны на деталях в разделе HKEY_CLASSES_ROOTTypeLib для библиотеки типов, которую мы оба используем в моем реестре, говорится следующее

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}]

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.6]
@="Microsoft Word 15.0 Object Library"
"PrimaryInteropAssemblyName"="Microsoft.Office.Interop.Word, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.6]

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.6Win32]
@="C:\Program Files\Microsoft Office 15\Root\Office15\MSWORD.OLB"

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.6Flags]
@="0"

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.6HelpDir]
@="C:\Program Files\Microsoft Office 15\Root\Office15\"

Итак, мы различаемся относительно местоположения моего MSWORD.OLB (как и другой комментатор, Винсент Дж.)

C:\Program Files\Microsoft Office 15\Root\Office15\MSWORD.OLB

Так что, возможно, в этом корень вашей проблемы.


2

S Meaden
1 Фев 2017 в 17:45

На машине установлена Windows XP SP2, Office 2003 SP1.
При подключении (Add Reference -> COM) библиотеки (Component Name = Microsoft Word 11.0 Object Library; TypeLib Version = 8.3) подключается нечто, не содержащее пространства имён Microsoft.Office.Interop.Word, поэтому я не могу потом написать что-нибудь вроде

using Word = Microsoft.Office.Interop.Word;
//...
Word.ApplicationClass locWordApp;

(Microsoft.Office содержит только пространство имён Core, где и в помине нет, например, ApplicationClass).

Кроме того, имеется другая машина, на которой стоит та же версия Ворда, но Windows 2000 SP4. Там всё это работает замечательно.
При попытке ручного переноса со второй машины на первую библиотеки Microsoft.Office.Interop.Word.dll и последующего её подключения (Add Reference -> Browse) компиляция проходит успешно, но при запуске на строке

if (locWordApp != null)
                    locWordApp.Quit(ref locWdSaveOptions, ref locMissingRef, ref locMissingRef);

вылетает исключение:
System.InvalidCastException was unhandled
Message=»Unable to cast COM object of type ‘Microsoft.Office.Interop.Word.ApplicationClass’ to interface type ‘Microsoft.Office.Interop.Word._Application’. This operation failed because the QueryInterface call on the COM component for the interface with IID ‘{00020970-0000-0000-C000-000000000046}’ failed due to the following error: Ошибка при загрузке библиотеки. (Exception from HRESULT: 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).»
Source=»Microsoft.Office.Interop.Word»
StackTrace:
at Microsoft.Office.Interop.Word.ApplicationClass.Quit(Object& SaveChanges, Object& OriginalFormat, Object& RouteDocument)
at E3ConstrDocs.MainForm.Execute() in C:WorkProgsE3ConstrDocsMainForm.cs:line 294
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart().

В чём может быть проблема?

Здравствуйте, Аноним, Вы писали:

в том, что у тебя не зарегистрирована библиотека типов msword.olb

<office path>OFFICE11MSWORD.OLB

Здравствуйте, Константин Л., Вы писали:

КЛ>в том, что у тебя не зарегистрирована библиотека типов msword.olb

Не зарегистрирована где?

КЛ><office path>OFFICE11MSWORD.OLB

Кроме того, я пробовал подключить её из вкладки Browse. Результат тот же:
Error 1 The type or namespace name ‘Interop’ does not exist in the namespace ‘Microsoft.Office’ (are you missing an assembly reference?) C:WorkProgsE3ConstrDocsMainForm.cs 19 35 E3ConstrDocs

При этом на другом компе всё работает. Размеры файлов MSWORD.OLB на этих компах совпадают.

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Константин Л., Вы писали:


КЛ>>в том, что у тебя не зарегистрирована библиотека типов msword.olb


А>Не зарегистрирована где?

в реестре. Это библиотека типов. Пусть тебя не смущает расширение файла (обычно оно .tlb). Неплохо было бы почитать теорию про COM, прежде чем браться за его сипользование.

Type Libraries могут существовать в виде отдельного файла а могут лежать в ресурсах COM DLL/EXE.
Посмотри, есть ли в реестре HKCR/TypeLib ветка с гуидом библиотеки типов msword.olb.

КЛ>><office path>OFFICE11MSWORD.OLB


А>Кроме того, я пробовал подключить её из вкладки Browse. Результат тот же:

А>Error 1 The type or namespace name ‘Interop’ does not exist in the namespace ‘Microsoft.Office’ (are you missing an assembly reference?) C:WorkProgsE3ConstrDocsMainForm.cs 19 35 E3ConstrDocs

А>При этом на другом компе всё работает. Размеры файлов MSWORD.OLB на этих компах совпадают.

Здравствуйте, Константин Л., Вы писали:

КЛ>Посмотри, есть ли в реестре HKCR/TypeLib ветка с гуидом библиотеки типов msword.olb.

Да, есть
Сейчас в ней следующее(далее содержимое экспортированного рег-файла):
//—
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}]

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.3]
@=»Microsoft Word 11.0 Object Library»

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.3]

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.3win32]
@=»C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB»

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.3FLAGS]
@=»0″

[HKEY_CLASSES_ROOTTypeLib{00020905-0000-0000-C000-000000000046}8.3HELPDIR]
@=»C:\Program Files\Microsoft Office\OFFICE11\»
//—

Всё на месте вроде?

Проблема не решена.
Интересное наблюдение: если по любой из References щёлкнуть правой кнопкой и выбрать «View in Object Browser», произойдёт переход к соотв. сборке в окне Object Browser’a. Но для Word’a это не так: переход происходит к с самому проекту, хотя сборка Interop.Word.dll в списке присутствует.
В чём может быть дело?

  • Remove From My Forums
  • Вопрос

  • Добрый день!

    Есть скрипт на powershell, который должен открыть документ Word и внести там кое-какие правки.
    Система Windows 8.1, в системе установлен MS Office 2010.

    При выполнении строки $MSWord = New-Object -ComObject word.application
    в переменной нет объекта — она пуста.

    Соответственно, в строчке $MSWord.documents.open($fullPath) происходит ошибка «Невозможно вызвать метод для выражения со значением NULL».

    Подскажите, куда копать, что надо сделать, чтобы объект создавался?

    • Изменено

      19 августа 2014 г. 8:58

    • Перемещено
      Elina Lebedeva
      19 августа 2014 г. 9:10

Хотя пакет Microsoft Office является одним из лучших продуктов в своей категории, пользователи часто сталкиваются с ошибками в нем. Одной из таких ошибок является ошибка VBA “Класс не зарегистрирован” в Microsoft Excel.

Ошибка обычно возникает при попытке запустить макрос в Excel, хотя это не всегда так. Когда это происходит, вы не можете выполнять желаемую функцию.

Однако ошибка VBA “Класс не зарегистрирован” не так сложна, как кажется, и мы перечислили лучшие исправления для нее в следующем разделе.

Как исправить ошибку VBA “Класс не зарегистрирован”?

1. Восстановить Microsoft Office

  • Нажмите Windows+ R, чтобы запустить команду «Выполнить», введите appwiz.cpl в текстовое поле и либо нажмите «ОК», либо нажмите Enter, чтобы открыть окно «Программы и компоненты».

  • Найдите запись Microsoft Office, выберите ее и нажмите «Изменить».

  • Нажмите «Да» в появившемся окне UAC (Контроль учетных записей).

  • Теперь выберите вариант онлайн-восстановления и нажмите кнопку «Восстановить», чтобы начать процесс.

Обнаружено, что процесс восстановления устраняет множество проблем с Microsoft Office, включая ошибку VBA “Класс не зарегистрирован”. Если этот метод не работает, перейдите к следующему.

2. Зарегистрируйте критический DLL-файл

  • Нажмите Windows+ S, чтобы запустить меню поиска, введите Windows Terminal в текстовое поле вверху, щелкните правой кнопкой мыши соответствующий результат поиска и выберите «Запуск от имени администратора» в контекстном меню.

  • Нажмите «Да» в появившемся приглашении UAC.

  • Теперь щелкните стрелку, направленную вниз, и выберите «Командная строка» в списке параметров. Кроме того, вы можете нажать Ctrl+ Shift+ 2, чтобы запустить командную строку.

  • Введите/вставьте следующую команду и нажмите Enter:
    cd C:WindowsSysWOW64

  • Теперь выполните следующую команду, чтобы зарегистрировать необходимый файл DLL :
    Regsvr32 fm20.dll

Еще один быстрый способ зарегистрировать отсутствующие DLL-файлы или заменить поврежденные — использовать Outbyte PC Repair Tool, надежный сторонний инструмент. Кроме того, он также будет искать вредоносное ПО, устранять его и устранять причиненный ущерб. Кроме того, инструмент также поможет оптимизировать реестр.

3. Запустите сканирование DISM и SFC.

  • Нажмите Windows+ R, чтобы запустить команду «Выполнить», введите wt в текстовое поле, нажмите и удерживайте клавишу Ctrl+ Shift, а затем нажмите «ОК» или нажмите, чтобы запустить Терминал WindowsEnter с повышенными правами.

  • Нажмите «Да» в приглашении UAC.

  • Нажмите на стрелку вверху и выберите «Командная строка» в раскрывающемся меню.

  • Теперь вставьте следующие три команды по одной и нажимайте Enter после каждой, чтобы запустить инструмент DISM :
    DISM.exe /Online /Cleanup-image /Scanhealth
    DISM.exe /Online /Cleanup-image /Restorehealth
    DISM.exe /online /cleanup-image /startcomponentcleanup
  • Теперь выполните следующую команду, чтобы выполнить сканирование SFC :
    sfc /scannow

Сканирование SFC (проверка системных файлов) и инструмент DISM (обслуживание образов развертывания и управление ими) — два эффективных метода устранения множества проблем, связанных с поврежденными системными файлами или проблемами с образом Windows.

4. Обновите Microsoft Office

  • Запустите любое приложение Microsoft Office и откройте новый пустой документ.
  • Теперь щелкните меню «Файл» в верхнем левом углу.

  • Выберите Аккаунт из списка вариантов слева.

  • Затем нажмите кнопку «Параметры обновления» в разделе «Информация о продукте».

  • Наконец, выберите «Обновить сейчас» в параметрах всплывающего меню.

  • Дождитесь установки обновления, если оно доступно.

Если проблема связана с текущей версией, попробуйте установить последнюю версию Microsoft Office.

Это все способы исправить ошибку VBA “Класс не зарегистрирован” при попытке запустить макрос в Excel. Если ни один из приведенных здесь методов не помогает, обновите MS Office до последней доступной версии.

Если у вас есть другие вопросы или вы знаете метод, которого здесь нет, оставьте комментарий в разделе ниже.


На чтение 4 мин. Просмотров 35 Опубликовано 13.05.2021

Когда вы запускаете Excel, он выполняет несколько процедур, чтобы убедиться, что все работает правильно. Если он обнаруживает ошибку, вы можете увидеть сообщение об ошибке в диалоговом окне. Иногда сообщения, которые вы видите в диалоговом окне, не так понятны, а некоторые просто загадочны.

Например, вы можете увидеть сообщение «Библиотека объектов не зарегистрирована» и быть полностью потеряно относительно того, что это значит. В этом случае полезно понять, как Excel работает с внешними программами.

Во время части процесса запуска Excel может загрузить любое количество надстроек, которые обеспечивают дополнительные функции вашей копии Excel. . По сути, эти надстройки представляют собой наборы макросов, которые выполняют определенные задачи. Макросы, в свою очередь, могут полагаться на другие файлы, содержащие информацию, которая помогает им выполнять свои обязанности. Эти внешние файлы называются библиотеками .

Excel поставляется с удивительным количеством библиотек, но не все они доступны одновременно. Библиотека доступна только после того, как она была «зарегистрирована» в Excel. Если библиотека не зарегистрирована, Excel не может ее использовать, а макросы в надстройке не могут ее использовать. Результат: сообщение об ошибке.

Лучший способ устранить эту проблему – определить, какие надстройки загружаются при запуске Excel. Изучите папку автозагрузки Excel и убедитесь, что вы знаете, что они все делают. (Вам не нужно знать, что они делают, шаг за шагом, но вы должны быть знакомы с тем, что делает надстройка в целом.)

Затем найдите другую систему, которая загружается те же надстройки. (Это должно быть легко сделать, если вы работаете в офисе, но сложнее, если вы домашний пользователь.) Как только вы найдете похожую систему, убедитесь, что она запускается без проблем. Если это так, то в исправной системе выполните следующие действия:

  1. Нажмите Alt + F11 , чтобы открыть редактор VBA.
  2. Выберите «Ссылки» в меню «Инструменты». Вы видите диалоговое окно «Ссылки». (См. Рис. 1.)
  3. Рисунок 1. Диалоговое окно «Ссылки».

  4. Запишите (на листе бумаги) имена библиотек, рядом с которыми есть галочки. Напишите точные имена, так как может быть много библиотек с похожими именами. Кроме того, все выбранные библиотеки, отмеченные флажками, должны быть перечислены вверху списка ссылок.
  5. Закройте диалоговое окно «Ссылки».
  6. Закрыть редактор VBA.

Теперь в системе, в которой есть проблемы, выполните те же действия, за исключением шага 3, вам нужно убедиться, что выбраны те же библиотеки, что и те, которые вы написали вниз. Когда вы закроете редактор VBA, перезапустите Excel, чтобы проверить, сохраняется ли проблема. Если это так, или если вы не смогли найти одну из отмеченных библиотек в проблемной системе, вам может потребоваться полностью перерегистрировать Excel. Если да, выполните следующие действия:

  1. Убедитесь, что Excel не запущен (выйдите из программы).
  2. Нажмите кнопку “Пуск”, чтобы отобразить меню “Пуск”.
  3. В меню “Пуск” выберите “Выполнить”. Windows отображает диалоговое окно «Выполнить». (См. Рис. 2.)
  4. Рисунок 2. Диалоговое окно «Выполнить».

  5. В поле «Открыть» введите полный путь к вашей программе Excel, а затем установите переключатель/regserver. Если полное имя пути включает пробелы, заключите полное имя пути в кавычки. Ниже приведен пример того, что вы можете ввести в поле «Открыть» (ваш путь может быть другим):
  6.  "c:  Program Files  Microsoft Office  Office  Excel.exe"/regserver 
  7. Нажмите “ОК”.

После перезапуска Excel проблема должна исчезнуть. Если этого не произошло, вам нужно точно выяснить, какая надстройка вызывает проблему. Для этого нужно найти файлы надстройки в папке автозагрузки и переименовать их или переместить во временную папку. Делайте это по одному файлу за раз, перезагружая Excel после каждого переименования или перемещения. Когда проблема исчезнет, ​​вы знаете, что нашли надстройку с проблемой, и можете связаться с поставщиком, чтобы узнать, как решить проблему.

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