gpt4 book ai didi

vba - MS Word 引用不起作用 |自动化错误 - 库未注册 |错误 -2147319779 (8002801d)

转载 作者:行者123 更新时间:2023-12-03 03:42:16 30 4
gpt4 key购买 nike

语境

我正在使用 Excel 中的 Word 打开文档并更新其中的链接。

起初,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 = Automation error - Library not registered.
Err.Source = VBAProject
Err.HelpFile = C:\PROGRA~2\COMMON~1\MICROS~1\VBA\VBA7.1\1036\VbLR6.chm
Err.LastDllError = 0



解决问题的测试

测试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消失了!!!! o_O

    我已经重新启动并检查过,我的隐藏文件是可见的,所以我只是不知道该怎么办!!!
    还有其他方法可以恢复库吗?还是强制加载呢?

    我再次重新启动,这次引用的路径更改为 C:\Program Files (x86)\Microsoft Office\Office15\MSWORD.OLB ,所以引用似乎有效,但我在同一行上遇到了同样的错误。

    显然 regsvr32仅适用于 DLLOCX ,所以我无法手动添加引用。

    测试二:维修办公室安装

    我已经修复了 Office 安装,但同样的问题出现在同一行...

    测试 3:从 cmd 启动并添加到 PATH 环境变量

    正如@S Meaden 建议的那样,我尝试从命令行打开 Word:

    在随机路径中: winword.exe /automation , winword.exe , winword /automationwinword'winword.exe.' is not recognised但是 start winwordstart 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)引用的 Policy 值,所以我将其备份并删除。但是没有变化,所以我重新添加它!

    测试 5:从 cmd 强制注册

    我试图通过以下方式强制注册 Excel 和 Word:
    "C:\Program Files (x86)\Microsoft Office\Office15\winword.exe" /r
    "C:\Program Files (x86)\Microsoft Office\Office15\winword.exe" /regserver
    "C:\Program Files (x86)\Microsoft Office\Office15\excel.exe" /r
    "C:\Program Files (x86)\Microsoft Office\Office15\excel.exe" /regserver

    但它并没有改变任何事情......

    测试 6

    还在寻找瘦身试试...

    问题

    引用再次指向现有文件,Word 仍然功能齐全,但我昨天工作的代码现在出错了:
    Set oW = VBA.GetObject(, "Word.Application")
    Set oW = VBA.CreateObject("Word.Application")

    Err.Number = -2147319779
    Err.HelpContext = 1000440
    Err.Description = Automation error - Library not registered.
    Err.Source = VBAProject
    Err.HelpFile = C:\PROGRA~2\COMMON~1\MICROS~1\VBA\VBA7.1\1036\VbLR6.chm
    Err.LastDllError = 0



    有谁知道周围的方法?

    简单的解决方法(未修复)

    只是使用后期绑定(bind)似乎对我有用,所以即使我很好奇为什么,我很高兴再次完成这项工作!

    所以现在我的声明看起来像这样:
    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 管道。当您使用 VBA.CreateObject("Word.Application") 创建 COM 对象时有一系列以注册表为中心的事件,您应该使用 RegEdit 仔细检查.

    注:我运行的是 Windows 8.1,我的 Word 是 15 版,你的可能不同。

    首先在配置单元 HKEY_CLASSES_ROOT 下查找字符串。 ,我可以在这里找到我的一个注册表片段演示

    [HKEY_CLASSES_ROOT\Word.Application]
    @="Microsoft Word Application"

    [HKEY_CLASSES_ROOT\Word.Application\CLSID]
    @="{000209FF-0000-0000-C000-000000000046}"

    [HKEY_CLASSES_ROOT\Word.Application\CurVer]
    @="Word.Application.15"

    [所以实际上我们可以这表明 VBA.CreateObject("Word.Application")VBA.CreateObject("Word.Application.15")应该解决相同的问题。] 从这里我们有 CLSID对于 Word 应用程序,它是 {000209FF-0000-0000-C000-000000000046} .所以我接下来去寻找那把 key 。

    我搜索 CLSID首先在 HKEY_CLASSES_ROOT\CLSID下在 32 位世界中可以找到所有类,但它不存在,因为对我来说,它是 64 位替代 key HKEY_CLASSES_ROOT\Wow6432Node\CLSID\
    您应该找到 CLSID在 32 位 key 或 64 位 key 下。在此键下,您应该找到许多子键,其中最重要的是 LocalServer32并且在那里找到服务器可执行文件的路径(对于 Word,它与用户应用程序可执行文件相同)。对我来说这是
    [HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{000209FF-0000-0000-C000-000000000046}\LocalServer32]
    @="C:\\Program Files\\Microsoft Office 15\\Root\\Office15\\WINWORD.EXE /Automation"

    所以现在我可以从命令行运行以测试使用 COM 启动 Word。
    C:\Program Files\Microsoft Office 15\Root\Office15\WINWORD.EXE /Automation

    您应该跟踪相同的调用链并解决任何问题。请提供反馈。

    如果可行,请检查您的变量声明。如果一种情况使用早期绑定(bind)而另一种情况使用后期绑定(bind),请进行实验并查看行为/错误是否发生变化。

    更新:我用谷歌搜索了你的错误号,但如果你使用它相当于 8002801D 的十六进制,你会得到更好的结果,有很多链接可以在那里查看,

    Google error 8002801D

    好的,从您的评论反馈来看,很高兴后期绑定(bind)有效,这证明了 COM 管道的这一方面,并​​将错误消息归咎于类型库。我很高兴我们有相同的版本,因此我们可以共享注册表的另一个片段。因此,出现在 VBA IDE 中的 Tools->References 对话框中的类型库是基于 HKEY_CLASSES_ROOT\TypeLib 下的详细信息。对于我们都使用我的注册表的类型库说以下
    [HKEY_CLASSES_ROOT\TypeLib\{00020905-0000-0000-C000-000000000046}]

    [HKEY_CLASSES_ROOT\TypeLib\{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_ROOT\TypeLib\{00020905-0000-0000-C000-000000000046}\8.6\0]

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

    [HKEY_CLASSES_ROOT\TypeLib\{00020905-0000-0000-C000-000000000046}\8.6\Flags]
    @="0"

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

    所以我们对 MSWORD.OLB 的位置有所不同。我的在(正如另一位评论者,Vincent G)
    C:\\Program Files\\Microsoft Office 15\\Root\\Office15\\MSWORD.OLB

    所以也许这是你问题的根源。

    关于vba - MS Word 引用不起作用 |自动化错误 - 库未注册 |错误 -2147319779 (8002801d),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41953912/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com