2012-08-22 92 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代碼編輯器中正確顯示這一點,但複製和粘貼應該工作。

相關問題