如何在Excel中打开特定版本的Word 2007/2010

时间:2012-08-22 12:27:54

标签: excel vba excel-vba ms-word

我安装了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 enter image description here

如果我使用

注册每个版本的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

5 个答案:

答案 0 :(得分: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")

您还需要测试以前版本的单词是否已打开,或使用基本GetObject以外的其他内容来激活窗口,否则无法保证它将获得正确的版本。

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

答案 1 :(得分: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 2002的命令行没有更改,但相同的代码现在启动Word 2010。

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

我希望这很有帮助,

JeffK

答案 2 :(得分: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代码编辑器正确显示,但复制和粘贴应该有效。

答案 3 :(得分: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")

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

答案 4 :(得分:0)

我遇到了类似的问题,并且认为我会详细介绍我将来遇到这些问题的经历。

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

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

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