如何在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.10
或Excel.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代码编辑器正确显示,但复制和粘贴应该工作。