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

我安装了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 

这是一个工作:

 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") 

您还需要testing以前版本的单词是否打开,或者使用除了基本的GetObject之外的其他内容来激活窗口,否则不能保证它会得到正确的版本。

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

这是一个VB.NET解决scheme:

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

这对某些人来说有些吓人,但是可能会有一个registry编辑器可以解决这个问题。 我无法testing,因为我只有一个版本的MS Office可用,但是,以前的版本仍然有registry项。

我在registry中find了2007版Word,它的默认位置是C:\ program files \ Microsoft Office \ Office14 \ WINWORD.EXE“,表示旧版本的Word已注册到最新版本的安装位置,因为它是新的默认设置。

你可以做的是导航到registry位置

 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") 

被调用,它可能会探测registry的可执行文件的位置,并find正确的path。

这可能进一步解释为什么代码工作了一些,而不是其他人。

我对指挥情况的观察

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

在你的计算机上工作还是不工作,这是你从微软获得的最新更新的function。

为什么我相信这个:

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

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

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

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

在周末,我有一个更新到我的电脑。 我通过一个应用程序来控制更新,这个应用程序让我可以控制何时发生更新,以便我可以观察到对configuration的更改。 今天上午(9/30/13),我打开了一个Word更新的计算机。 直到上周我的应用程序运行一次之后,我才知道这一点。 应用程序运行良好,并按预期调用Word 2002。

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

之后,我运行了上周和今天一直为我工作的应用程序。 现在,在Word更新之后(紧接在!之后),即使调用Word 2002的命令行没有更改,现在相同的代码也会启动Word 2010。

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

我希望这是有帮助的,

JeffK

我也遇到了类似的问题,并且认为我将详细介绍那些在未来偶然发现的问题。

在我的情况下,我有一个Powerpointmacros,应该打开一个文件对话框,供用户select一些Excel文件,然后从数据创build表; 我没有问题,直到我最近安装了Excel 2003.现在Powerpoint打开了一个Excel 2003文件对话框,当试图select* .xlsx文件时会引发错误。 如果我在我的代码中使用Excel.Application.10Excel.Application.14来创buildExcel对象,它并不重要,它总是一个Excel 2003文件对话框。

我注意到在资源pipe理器中,* .xlsx文件设置为在Excel 2010中打开,* .xls文件设置为在Excel 2003中打开。我试图平常的方式来重置* .xls文件在2010年打开无济于事。 我最终不得不删除registry项并修复Office 2010.现在,所有的Excel文件在2010年打开,我的问题已经修复。

我知道我的问题与你的问题有点不同,但我认为我的经验可以帮助你find解决办法。 我认为任何解决scheme将最终依靠一些registry编辑。

我浪费了半天的时间,并希望帮助别人也这样做! 我在同一台笔记本电脑上运行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" 

再试一次:

 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:简历TryAgain

结束小组

我不能让SO代码编辑器正确显示,但复制和粘贴应该工作。