2012-08-22 51 views
10

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

我已经试过后期绑定

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

如果我使用

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

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

注册Word的每个版本再注册的版本打开,但我就不能开开非注册。

任何人都可以帮助并告诉我如何使用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 
+0

您可以发布创建对象的代码,然后调用注册版本的MS Word? – EastOfJupiter

+0

我编辑了我的问题,以显示对象的声明和分配 – user3357963

+0

我不清楚。我道歉,但我想要整个子程序。如果没有整块,很难看到可能会丢失或不正确。 – EastOfJupiter

回答

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从逻辑上讲,这应该是正确的应用程序,除非MS有一些刺激性验证,以始终启动新版本 –

+0

使用Shell启动Office如果版本不是当前注册的版本,则配置过程。然后它在GetObject上失败,因为它没有准备好几分钟。 – user3357963

+0

@ooo - 有点破解,但你可以使用'Application.Wait'来告诉VBA在Shell执行操作时挂出一点。 –

0

这是一个VB.NET的解决方案被称为:

Sub Word_InfoLate() 
Dim wordApp2007 As New Object 
Dim wordApp2010 As New 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") 

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

+0

'Dim wordApp2007 As New Object' does not compile。 – user3357963

+0

放下'新'。使用'Dim wordApp2007 As Object' – CaBieberach

+0

@CaBieberach - OP已经有了那行代码,这是行不通的。最近我在.NET开发中花了很多时间,然而我发现它是一个可以察觉的错误,但是我错了。 – EastOfJupiter

1

这可能进一步解释为什么代码工作的一些时间,而不是别人。

我的命令的情况下观察

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

在您的计算机上工作与否是它是Microsoft提供的最新更新的功能。

为什么我相信这一点:

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

本讨论链中提到的解决方案为我的问题提供了答案。 (谢谢堆栈溢出的贡献者!)我想使用Word XP,所以我看着我的目录,并观察到的Word XP(又名Word 2002中)是办公室10中的一员,所以我创建的命令

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

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

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

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

之后,我运行了上周和今天运行得非常好的应用程序。现在,在Word更新(紧接着!)之后,尽管事实上调用Word 2002的命令行没有更改,但现在相同的代码启动了Word 2010。

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

我希望这是有帮助的,

JeffK

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年打开,我的问题已得到修复。

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

0

我在这上面浪费了半天时间,并且想要帮助防止别人也这样做!我在同一台笔记本电脑上运行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代码编辑器中正确显示这一点,但复制和粘贴应该工作。

相关问题