- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
语境
我正在使用 Excel 中的 Word 打开文档并更新其中的链接。
起初,Word 正在打开并打开文档,但我得到了在线错误:
For Each aField In oDoc.Fields
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
C:\Program Files (x86)\Common Files\microsoft
shared\OFFICE15\MSWORD.OLB
)regsvr32 MSWORD.OLB
在控制台MSWORD.OLB
消失了!!!!
o_O
C:\Program Files (x86)\Microsoft Office\Office15\MSWORD.OLB
,所以引用似乎有效,但我在同一行上遇到了同样的错误。
regsvr32
仅适用于
DLL
和
OCX
,所以我无法手动添加引用。
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环境变量:
"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
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
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"
C:\Program Files\Microsoft Office 15\Root\Office15\WINWORD.EXE /Automation
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/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!