10

我安装了 Word 2007 和 2010。我需要从 Excel 中打开 Word,但我需要指定需要在 VBA 中打开的版本。

我试过后期绑定

Dim wordApp2007 As Object
Dim wordApp2010 As Object

Set wordApp2007 = CreateObject("Word.Application.12")
wordApp2007.Visible = True
Set wordApp2010 = CreateObject("Word.Application.14")
wordApp2010.Visible = True

但都打开 Word 2010

我也尝试过使用早期绑定

Dim wordApp As Word.Application
Set wordApp2007 = New Word.Application
wordApp2007.Visible = True

并设置对 Word 12.0 对象模型的引用,但这仍然会打开 Word 2010 在此处输入图像描述

如果我使用注册每个版本的 Word

"C:\Program Files\Microsoft Office\Office12\WINWORD.EXE" /regserver

"C:\Program Files\Microsoft Office\Office14\WINWORD.EXE" /regserver

然后注册的版本打开,但我无法打开未注册的版本。

谁能帮助并告诉我如何使用 VBA 在 Excel 中打开特定版本的 Word?

谢谢

编辑:示例代码....

Option Explicit

Dim wordApp2007 As Word.Application

Sub Word_InfoEarly()
'early binding
Set wordApp2007 = New Word.Application
wordApp2007.Visible = True

    'other Stuff
    Stop

    wordApp2007.Quit
    Set wordApp2007 = Nothing

End Sub


Sub Word_InfoLate()
Dim wordApp2007 As Object
Dim wordApp2010 As Object

    Set wordApp2007 = CreateObject("Word.Application.12")
    wordApp2007.Visible = True
    Set wordApp2010 = CreateObject("Word.Application.14")
    wordApp2010.Visible = True

    'other Stuff
    Stop

    wordApp2007.Quit
    Set wordApp2007 = Nothing
    wordApp2010.Quit
    Set wordApp2010 = Nothing

End Sub
4

5 回答 5

3

这是一个解决方法:

TaskID = Shell("C:\Program Files\Microsoft Office\Office12\WINWORD.EXE",vbHide) '2007
'TaskID = Shell("C:\Program Files\Microsoft Office\Office14\WINWORD.EXE",vbHide) '2010
GetObject(,"Word.Application")

您还需要测试之前版本的 word 是否打开,或者使用除基本之外的其他东西GetObject来激活窗口,否则无法保证它会获得正确的版本。

另一种方法是在Shell命令中传递文档名称,然后GetObject可以使用文档名称调用

于 2012-08-22T13:49:35.693 回答
1

这可以进一步解释为什么代码在某些时候有效,而在其他时候无效。

我对指挥部情况的观察

'Set wordAppxxxx = CreateObject("Word.Application.xx")'

在您的计算机上工作与否是因为它是您从 Microsoft 获得的最新更新的功能。

为什么我相信这一点:

我有一个将文本文件转换为 Word 文档的应用程序,以便与某些旧版应用程序向后兼容。最好的计划包括使用与旧应用程序的设计版本相似的 Word 版本。因此,我搜索了如何调用旧版 Word,而不是我计算机上的默认产品 Word 2010。

此讨论链中提到的解决方案为我的问题提供了答案。(感谢 Stack Overflow 的贡献者!)我想使用 Word XP,所以我查看了我的目录,发现 Word XP(又名 Word 2002)是 Office 10 的成员,所以我创建了命令

'Set wordApp2002 = CreateObject("Word.Application.10")'

我的程序启动了 Word 2002,世界是一个快乐的地方。

整个周末,我对我的电脑进行了更新。我通过一个应用程序控制更新,该应用程序让我可以控制更新发生的时间,以便我可以观察到我的配置的变化。今天早上(2013 年 9 月 30 日)我打开了一台有 Word 更新的电脑。直到上周我运行了我的应用程序后,我才知道这一点。该应用程序运行良好,并按预期调用了 Word 2002。

但随后我得到了一个横幅页面,通知我正在安装自己的 Word 2010 更新。

之后,我运行了上周和今天一次运行良好的应用程序。现在,在 Word 更新之后(立即!),相同的代码现在启动 Word 2010,尽管调用 Word 2002 的命令行没有改变。

这似乎有力地证明了 Microsoft 更新调整了以前允许 VB 代码按预期工作的设置。这可能是一个引起微软注意的好项目,所以看看我们是否可以在后续的更新包中稳定这个项目,以便在未来的版本中保持一致的行为。

我希望这是有帮助的,

杰夫克

于 2013-09-30T16:50:50.273 回答
1

我为此浪费了半天时间,并希望帮助防止其他人这样做!我在同一台笔记本电脑上运行 Windows 7 和 Office 2013 和 2010。我想让 Access VBA 打开旧版本的 Word,因为 Word 2013 标注打印时带有厚厚的黑色边框。

尝试了很多变体后,这是我的有效代码:

Sub GetWordReference()

'finally got Access to open old version of Word

'open Word 2010
Shell "C:\Program Files (x86)\Office 2010\Office14\winword.exe"

'open Word 2013
'Shell "C:\Program Files\Microsoft Office 15\root\office15\winword.exe"

TryAgain:

    On Error GoTo NoWord
    Set word2010 = GetObject(, "Word.Application")
    On Error GoTo 0

    word2010.Visible = True

    'word2010.Documents.Add
    'word2010.Selection.TypeText "This is Word " & word2010.Version

    Exit Sub

NoWord:
    Resume TryAgain

End Sub

我无法让 SO 代码编辑器正确显示这一点,但复制和粘贴应该可以。

于 2015-05-12T08:27:19.793 回答
0

这是一个 VB.NET 解决方案:

Sub Word_InfoLate()
Dim wordApp2007 As Object
Dim wordApp2010 As Object

这对某些人来说有点吓人,但可能有一个注册表编辑可以解决这个问题。我无法测试,因为我只有一个版本的 MS Office 可供我使用,但是,以前的版本仍然有注册表项。

我在注册表中找到了 2007 版本的 Word,它的默认位置是 C:\program Files\Microsoft Office\Office14\WINWORD.EXE”,表明旧版本的 Word 已注册到最新版本的安装位置,因为它是新的默认位置。

您可以做的是导航到注册表位置

HKEY_CLASSES_ROOT\Word.Documet.12\shell\Open\Command 

将(默认)键更改为“C:\program Files\Microsoft Office\Office12\WINWORD.EXE”/n“%1”

理论上无论何时

Set wordApp2007 = CreateObject("Word.Application.12")

调用它可能会在注册表中探测可执行文件的位置,并找到正确的路径。

于 2012-08-22T14:14:37.860 回答
0

我有一个类似的问题,并认为我会为那些在未来偶然发现这个问题的人详细介绍我的经历。

在我的情况下,我有一个 Powerpoint 宏,它应该打开一个文件对话框,供用户选择一些 Excel 文件,然后从数据中创建表格;在我最近安装 Excel 2003 之前,我对它没有任何问题。现在 Powerpoint 正在打开一个 Excel 2003 文件对话框,在尝试选择 *.xlsx 文件时会引发错误。我是否使用Excel.Application.10Excel.Application.14在我的代码中创建 Excel 对象并不重要,它始终是一个 Excel 2003 文件对话框。

我在资源管理器中注意到 *.xlsx 文件设置为在 Excel 2010 中打开,*.xls 文件设置为在 Excel 2003 中打开。我尝试以通常的方式重置要在 2010 年打开的 *.xls 文件无济于事. 我最终不得不删除注册表项并修复 Office 2010。现在所有 Excel 文件都在 2010 年打开,我的问题已得到解决。

我知道我的问题与您的问题有些不同,但我认为我的经验可以帮助您找到解决方案。我认为任何解决方案最终都会依赖于一些注册表编辑。

于 2014-10-28T16:38:06.077 回答