概要
当您使用New运算符或无论函数在 Microsoft Visual Basic 创建 Microsoft Office 应用程序的实例时,可能会收到以下错误消息:
运行时错误 '429': ActiveX 组件无法创建对象
请求的自动化对象不能由 COM 创建,因此 Visual Basic 到不可用时,将发生此错误。该错误通常出现某些计算机而不是其他。
本文提供了一些故障排除的提示,可帮助您诊断和解决常见的问题,已知会导致此错误。
详细信息
与在 Visual Basic 中的一些错误,不同的是没有为错误 429 的一个原因。由于错误的应用程序或系统配置,或者丢失或损坏组件时出现问题。找到确切的原因是一种消除的可能性。如果您遇到此错误,客户端计算机上的,有许多事情需要检查以找出并解决此错误。
项目以后为您提供了一些实用的建议,对此错误进行疑难解答时使用 Office 应用程序。其中某些信息还适用于 Office COM 服务器,但这篇文章假定您要自动化 Microsoft Office。
检查代码
寻找该问题的第一去处将是代码中。您可以诊断错误之前,您需要知道错误发生的位置。请尝试缩小其范围下一行代码。
当查找失败的代码时,请尝试执行以下:
-
确保该代码使用显式的对象创建。任何问题则更容易发现和识别问题缩小到单个操作。例如,不执行下列操作:
Application.Documents.Add 'DON'T USE THIS!!
或:
Dim oWordApp As New Word.Application 'DON'T USE THIS!!
'... some other code
oWordApp.Documents.Add这两种方法使用隐式对象的创建。直到至少一次调用变量未启动 Microsoft Word。在程序的不同部分中,可以调用该变量,因为这会使问题难以本地化。此外,它是不清楚问题是否与创建应用程序对象或文档对象。
相反,请显式调用单独创建每个对象:Dim oWordApp As Word.Application
Dim oDoc As Word.Document
Set oWordApp = CreateObject("Word.Application")
'... some other code
Set oDoc = oWordApp.Documents.Add这使得问题更容易地隔离并使代码更具可读性。
-
在创建 Microsoft Office 应用程序的实例,而不是新建使用无论。无论更紧密地映射到大多数的 Visual C++ 客户端所使用的创建过程,并允许在服务器的 CLSID 版本之间可能发生更改。无论使用早期绑定和后期绑定对象。
-
验证程序 Id 的字符串传递给无论是否正确,以及它是独立的版本 (而不是"Excel.Application.8",即使用"Excel.Application")。它可能发生故障的系统具有更旧或更新版本的 Microsoft Office 比您指定 ProgID 的版本。
-
为了帮助调试无法在 IDE 中运行的应用程序中,使用Erl命令报告的失败的行的行号。例如,以下代码将告诉您不能创建自动化对象 (Word 或 Excel):
Dim oWord As Word.Application
Dim oExcel As Excel.Application
On Error Goto err_handler
1: Set oWord = CreateObject("Word.Application")
2: Set oExcel = CreateObject("Excel.Application")
' ... some other code
err_handler:
MsgBox "The code failed at line " & Erl, vbCritical使用消息框和行号的组合跟踪错误。
-
请尝试使用后期绑定 (即模糊 oWordApp As Object)。早期绑定的对象要求他们自定义的接口,以跨进程边界进行封送。如果封送处理期间无论或新建的自定义接口出现问题,则会出现错误 429。后期绑定的对象使用系统定义的接口 (IDispatch) 不需要自定义代理服务器以进行封送处理。请尝试使用后期绑定的对象看到这样的区别。
如果仅在对象是早期绑定的变量时,将出现该问题,该问题与服务器应用程序,并通常可以通过重新安装应用程序 (请参阅后面) 来解决问题。 -
如果您正在从 ASP 或 MTS 组件自动化,而不是Server.CreateObject()使用无论。使用Server.CreateObject将实例化 Office 应用程序标识下 MTS 包的已知会导致 Microsoft Office 的问题。
检查自动化服务器
无论或新建与错误的最常见原因是服务器应用程序本身的问题。通常情况下,这些问题都是与配置或应用程序的安装程序。下面是一些要检查的项目:
-
检查 Microsoft Office 自动化所需的应用程序已安装在本地计算机上,并确保您可以从开始启动应用程序,然后运行对话框。如果无法手动启动该程序,它不会通过自动化。
-
重新注册该应用程序,通过在开始键入服务器的路径,然后运行对话框中,然后将/RegServer附加到行的结尾。按确定。这应以静默方式运行应用程序并重新将其注册为 COM 服务器。如果缺少注册表项是问题,这通常改正它。
-
检查要自动化的应用程序的 LocalServer32 键下的 CLSID。请确保它将指向正确的位置的应用程序,并确保正在短路径 (DOS 8.3) 格式的路径名称。虽然它并不要求一台服务器必须使用的短路径名称注册,包含嵌入的空格的长路径名据悉导致问题在某些系统上 (请参阅后面)。
要检查服务器存储路径项,请在开始键入regedit启动 Windows 注册表编辑器,然后运行对话框中。定位到 HKEY_CLASSES_ROOT\Clsid 项。在此项下您将找到系统上的已注册的自动化服务器的 Clsid。以后使用的值,查找键,它表示 Office 应用程序要执行自动化并检查其 LocalServer32 项的路径。
+========================+=========================================+
| Office Server | CLSID Key |
+========================+=========================================+
| Access.Application | {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} |
+------------------------+-----------------------------------------+
| Excel.Application | {00024500-0000-0000-C000-000000000046} |
+------------------------+-----------------------------------------+
| FrontPage.Application | {04DF1015-7007-11D1-83BC-006097ABE675} |
+------------------------+-----------------------------------------+
| Outlook.Application | {0006F03A-0000-0000-C000-000000000046} |
+------------------------+-----------------------------------------+
| PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B} |
+------------------------+-----------------------------------------+
| Word.Application | {000209FF-0000-0000-C000-000000000046} |
+------------------------+-----------------------------------------+
路径与文件的实际位置匹配?请注意,短路径名可以提供路径是正确的当不可能时的印象。例如,Microsoft Office 和 Microsoft Internet Explorer (如果已安装在默认位置) 将有一个类似于"C:\PROGRA~1\MICROS~X\"的短路径其中 X 是一些数字。不是您所看的短路径名称从立刻显而易见。
您可以测试的路径由注册表中的值复制并粘贴到的开始,然后运行对话框中 (在运行应用程序之前删除注册服务器对象开关) 确实正确。选择确定时是否启动应用程序?如果是的话,服务器已正确注册。如果不能,则应当使用正确的路径 (使用尽可能的短路径名称) 替换 LocalServer32 键的值。 -
我们知道问题发生自动化 Word 或 Excel 如果 Normal.dot 模板 (字) 或文件夹的资源文件 (Excel) 已损坏时。若要测试是否出现损坏,搜索本地硬盘以查找 Normal.dot 或 *.xlb 的所有实例。(请注意,是否您运行 Windows 2000、 Windows NT 或 Windows 95/98 的启用配置文件,您可能会发现这些文件,另一个用于每个用户配置文件在系统上的多个副本)。临时重命名 Normal.dot 文件或 *.xlb 文件,并重新运行自动化测试 (Word 和 Excel 会创建这些文件如果他们找不到它们)。代码现在工作吗?如果是,然后重命名的文件应删除,因为已损坏。如果不是,因此不会丢失所有自定义设置保存在这些文件时,应重其回原来的名称命名。
-
如果您在 Windows NT、 Windows 2000、 Windows XP 或 Windows Server 2003 系统上,下运行应用程序的管理员帐户。办公室服务器需要对注册表和磁盘驱动器的读/写访问,如果您的当前安全设置拒绝此权限可能不正确会加载。
检查系统
系统配置也会导致进程外 COM 服务器创建的问题。以下是要检查系统上的一些事项发生错误:
-
任何进程外服务器时出现问题?如果您拥有的应用程序只使用特定的 COM 服务器 (例如,Word),您需要测试不同的进程外服务器,以确保 COM 层本身没有问题。可以在该系统上不创建任何进程外 COM 服务器,如果 OLE 系统重新安装的文件 (见下文),或重新安装操作系统需要解决的问题。
-
检查管理自动化的 OLE 系统文件的版本号。这些文件通常为一组,安装,应与内部版本号。未正确配置的设置实用程序可以错误地安装文件分开,导致它们变得不匹配。若要避免自动化的问题,应检查以确保文件匹配生成的文件。
您会发现自动化文件 Windows\System 或 Winnt\System32 目录中。以下是要检查的文件的列表:
+---------------+-------------+----------------+
| File Name | Version | Date Modified |
+---------------+-------------+----------------+
| Asycfilt.dll | 2.40.4275 | March 08, 1999 |
| Oleaut32.dll | 2.40.4275 | March 08, 1999 |
| Olepro32.dll | 5.0.4275 | March 08, 1999 |
| Stdole2.tlb | 2.40.4275 | March 08, 1999 |
+---------------+-------------+----------------+
检查文件版本,请右键单击该文件在资源管理器中,并从弹出式菜单中选择属性。最重要的值是文件版本 (版本号) 以及上次修改的日期的最后四位数。您想要确保这些值都相同的所有自动化文件。
请注意的版本号和上面给出的日期,例如只。您的值可能会有所不同。重要的是这些值匹配,而不属于此表。
如果内部版本号或修改的日期,文件不匹配,您可以下载的自解压缩实用程序将更新您的自动化文件。的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:290887 VBRun60sp6.exe 安装 Visual Basic 6.0 SP6 运行时文件
-
Windows NT 4.0 具有启动自动化服务器包含在名称中,嵌入的空格和/或类似于其前 8 个字符完全相同的另一个文件夹的文件夹中存在一个已知的问题。例如,居住在 C:\Program Files\SomeFolder 的服务器可能无法启动无论调用期间,如果名为 C:\Program Stuff\SomeFolder 的系统上的另一个文件夹。有关详细信息,请参见下面的知识库文章:有关此问题和替代方法的步骤的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
185126错误: COM/OLE 服务器无法启动 Windows NT 4.0 上
重新安装 Microsoft Office
如果上述步骤都不能帮助解决此问题,请考虑卸载并重新安装 Microsoft Office。Microsoft 建议您首先卸载现有版本,然后重新从原始安装盘安装。
有关被移除的项的完整列表,请参阅下列知识库文章:
219423 OFF2000: 如何完全删除 Microsoft Office 2000年
158658 OFF97: 如何完全删除 Microsoft Office 97年
参考资料
有关"429"错误消息的疑难解答的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
240377如何: 确保正确地安装 Jet 3.5 (第 1 部分)
有关最新信息和有关 Microsoft Office 自动化代码示例,请参阅 Microsoft 联机支持站点: