听起来您基本上想要按照为多个 Office 版本编写自动化客户端中的建议进行操作,但忽略了有关使用后期绑定的建议。
涉及的类型库是 MSWORD8.OLB,但我不记得是否有任何合法的方法可以在没有 Word 97 或包含 Word 的 Office 97 版本的情况下获得它。我也不确定注册此 tylepib 对您的 Word 2007 安装有何影响,因为它们可能共享许多 ClassID 值。
在 VC++ 文章PRB:Automation of Office Using #import Can Fail if Multiple Versions of Office Are Installed 中,微软似乎暗示这可能是一个可行的策略,只要您引用正确的 OLB。这对于 VB6 来说可能比在 C++ 中的问题要少,因为 VB6 不使用 VC++ #import 语义来定位类型库。再一次,他们可能指的是运行时行为,因为解释的结论是再次建议后期绑定。
文章WD: How to Get the Word for Windows Type Library提供了 Word 6 和 Word 7 类型库的链接(链接可能不再有效),但没有针对 Word 97 的链接,他们建议您通过安装 Word 97 来获取。
无论如何,使用 Word 97 中的常量、枚举等听起来很安全,并对所有对象使用后期绑定。这个“半条面包”总比没有好。您仍然可以使用早期绑定声明进行初始开发以获得“智能感知”帮助,然后返回并将所有早期绑定对象声明更改为后期绑定As Object
并替换Set X = New TYPE
为相应的后期绑定CreateObject()
调用,留下实际的强键入作为尾随注释。还可以使用条件编译#If/#Else
块使稍后更容易返回到早期绑定。
由于今天可能无法合法获取 MSWORD8.OLB,您也可以考虑关闭:“Visual Basic for Applications 中的内置常量”(WC0993),它提供了包含 VB .BAS 模块的下载,该模块定义了许多旧版本 Word 和其他 Office 应用程序。下载链接有效 - 至少现在!
由于命名常量是类型库的主要原因(考虑到只有后期绑定才是真正安全的),这可能不是一个糟糕的折衷方案。您可以获取所需的 .BAS 文件,对其进行清理(其中肯定有一些缺陷),甚至可以将其转换为仅包含这些常量和枚举的自定义“通用字”TLB。就此而言,可能有人已经完成了这项工作。不过,我建议您在编写自己的“VB .BAS to ODL/IDL”编译器之前尝试一些搜索。