2012-08-22 9 views
10

Ich habe Word 2007 und 2010 installiert. Ich muss Word innerhalb von Excel öffnen, aber ich muss angeben, welche Version ich innerhalb von VBA öffnen muss.So öffnen Sie eine bestimmte Version von Word 2007/2010 in Excel

Ich habe spät versucht

Bindung
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 

aber beide offen Word 2010

ich auch die frühe Bindung habe versucht, durch

Dim wordApp As Word.Application 
Set wordApp2007 = New Word.Application 
wordApp2007.Visible = True 

mit und Einstellung Verweise auf das Word-12.0-Objekt Modell, aber das öffnet immer noch Word 2010 enter image description here

Wenn ich jede Version von Word registrieren mit

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

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

dann die Version öffnet sich registriert, aber dann kann ich nicht öffnen öffnen die nicht registriert.

Kann mir jemand helfen und mir zeigen, wie man eine bestimmte Version von Word in Excel mit VBA öffnet?

Danke

Edit: Beispielcode ....

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

Können Sie bitte den Code posten, der das Objekt erstellt, und dann die registrierte Version von MS Word aufruft? – EastOfJupiter

+0

Ich habe meine Frage bearbeitet, um sowohl die Deklaration als auch die Zuweisung der Objekte anzuzeigen – user3357963

+0

Ich war nicht klar. Ich entschuldige mich, aber ich hätte gerne die ganze (n) Unterroutine (n). Es ist schwer zu erkennen, was ohne den ganzen Block fehlt oder inkorrekt ist. – EastOfJupiter

Antwort

3

Dies ist eine Arbeit um:

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

Sie würden auch wenn eine frühere Version des Wortes müssen testen ist geöffnet, oder verwenden Sie etwas anderes als eine grundlegende GetObject, um das Fenster zu aktivieren, sonst gibt es keine Garantien, dass es die richtige Version erhalten wird.

Die andere Möglichkeit wäre, die Dokumentnamen in dem Shell Befehl übergeben, und dann GetObject konnte mit dem Dokumentnamen

+1

+1 Logisch sollte dies die richtige App shell, es sei denn, MS einige irritierende Validierung vorhanden, immer die neuere Version –

+0

starten Mit der Shell startet das Office Konfigurationsprozess, wenn die Version nicht die aktuell registrierte Version ist. Es schlägt dann auf GetObject fehl, da es für einige Minuten nicht bereit ist. – user3357963

+0

@ooo - ein bisschen wie ein Hack, aber Sie könnten 'Application.Wait' verwenden, um VBA mitzuteilen, dass es sich ein wenig ausruhen soll, während die Shell ihr Ding macht. –

0

Dies ist eine VB.NET Lösung genannt werden:

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

Dies ist ein bisschen einschüchternd für einige, aber es kann eine Registry-Bearbeitung geben, die das lösen kann. Ich kann nicht testen, da mir nur eine Version von MS Office zur Verfügung steht. In früheren Versionen sind jedoch noch Registrierungsschlüssel vorhanden.

Ich habe die 2007-Version von Word in der Registrierung gefunden, und der Standardspeicherort ist C: \ Programme \ Microsoft Office \ Office14 \ WINWORD.EXE "angibt, dass ältere Versionen von Word auf den neuesten Installationsort als registriert sind es ist neuer Standard

Was Sie ist

HKEY_CLASSES_ROOT\Word.Documet.12\shell\Open\Command 

ändern Sie die (Standard) Taste „C zum Registrierungsschlüssel navigieren Sie zu tun möglicherweise in der Lage zu lesen:. \ Programme \ Microsoft Office \ Office12 \ WINWORD.EXE“/ n‚% 1‘

In der Theorie, wenn

Set wordApp2007 = CreateObject("Word.Application.12") 

aufgerufen wird die Registrierung für den Speicherort der ausführbaren Sonde kann, und den richtigen Weg finden.

+0

'Dim WordApp2007 als neues Objekt' kompiliert nicht. – user3357963

+0

Drop die 'New'. Verwenden Sie "Dim wordApp2007 als Objekt" – CaBieberach

+0

@CaBieberach - Das OP hatte bereits diese Codezeile, die nicht funktioniert. Ich habe in letzter Zeit ziemlich viel Zeit mit .NET-Entwicklung verbracht, und das habe ich als vermeintlichen Fehler bemerkt, aber ich war falsch. – EastOfJupiter

1

Dies kann weiter erklären warum funktioniert der Code einige Male und andere nicht.

Meine Beobachtung über die Situation des Befehls

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

funktioniert oder nicht auf Ihrem Computer ist, dass es eine Funktion des neuesten Updates ist, das Sie von Microsoft erhalten.

Warum ich glaube, das:

Ich habe eine Anwendung, die für die Abwärtskompatibilität mit einigen Legacy-Anwendungen eine Textdatei in ein Word-Dokument konvertiert. Der beste Plan sieht vor, eine Version von Word zu verwenden, die der Version ähnelt, mit der die alten Apps entwickelt wurden. Als Ergebnis suchte ich nach einer Legacyversion von Word im Gegensatz zu dem Standardangebot auf meinem Computer, das Word 2010 ist.

Die in dieser Diskussionskette angegebene Lösung lieferte die Antwort auf meine Frage. (Danke Überlauf Beiträger Staple!) Ich wollte Word XP verwenden, so dass ich schaute auf meine Verzeichnisse und beobachtet, dass Word XP (auch bekannt als Word 2002) ist ein Mitglied von Office 10, so habe ich den Befehl

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

und mein Programm startete Word 2002 und die Welt war ein glücklicher Ort.

Im Laufe der Woche hatte ich ein Update auf meinen Computer. Ich kontrolliere die Updates über eine App, die mir Kontrolle darüber gibt, wann Updates stattfinden, so dass ich Änderungen an meiner Konfiguration beobachten kann. Heute Morgen (30.9.13) habe ich einen Computer eingeschaltet, der ein Word-Update hatte. Ich wusste das erst, nachdem ich letzte Woche eine App von mir gestartet hatte. Die App lief ordnungsgemäß und Word 2002 wie erwartet aufgerufen.

Aber dann bekam ich die Bannerseite, die mich über ein Word 2010-Update informierte, das sich selbst installierte.

Danach habe ich die App, die letzte Woche und heute einmal so gut für mich funktionierte, ausgeführt. Jetzt, nach der Word-Aktualisierung (unmittelbar danach!), Startet derselbe Code jetzt Word 2010, obwohl die Befehlszeile, die Word 2002 aufruft, sich nicht geändert hat.

Dies scheint ein starker Hinweis darauf zu sein, dass ein Microsoft-Update die Einstellungen optimiert hat, die zuvor den VB-Code erwartungsgemäß funktionieren ließen. Dies ist möglicherweise ein guter Punkt, den Sie Microsoft zur Kenntnis bringen sollten, um zu sehen, ob wir diesen Artikel in nachfolgenden Aktualisierungspaketen stabilisieren können, um konsistentes Verhalten in zukünftigen Versionen zu ermöglichen.

Ich hoffe, dass dies hilfreich ist,

jeffk

0

Ich hatte ein ähnliches Problem, und dachte, ich würde Detail meiner Erfahrung für diejenigen, die in Zukunft über diese stolpern.

In meiner Situation hatte ich einen Powerpoint-Makro, der einen Dateidialog öffnen sollte, damit der Benutzer einige Excel-Dateien auswählt und dann Tabellen aus den Daten erstellt; Ich hatte kein Problem damit, bis ich vor kurzem Excel 2003 installiert habe. Jetzt öffnete Powerpoint einen Excel 2003-Dateidialog, der beim Versuch, eine * .xlsx-Datei auszuwählen, Fehler aufwerfen würde.Es spielte keine Rolle, ob ich in meinem Code Excel.Application.10 oder Excel.Application.14 verwendete, um das Excel-Objekt zu erstellen, es war immer ein Excel 2003-Dateidialog.

Ich bemerkte im Explorer, dass * .xlsx Dateien festgelegt wurden in Excel 2010 geöffnet werden und * .xls Dateien wurden festgelegt, in Excel 2003 geöffnet werden. Ich versuchte auf übliche Weise zurückgesetzt * .xls Dateien in geöffnet werden 2010 ohne Erfolg. Am Ende musste ich den Registrierungsschlüssel löschen und Office 2010 reparieren. Jetzt, da alle Excel-Dateien im Jahr 2010 geöffnet wurden, wurde mein Problem behoben.

Ich weiß mein Problem war ein bisschen anders als deins, aber ich denke meine Erfahrung könnte zu einer Lösung führen. Ich denke, jede Lösung wird am Ende auf einige Registry-Bearbeitung verlassen.

0

Ich habe einen halben Tag damit verschwendet und möchte verhindern, dass andere dasselbe tun! Ich verwende Windows 7 und Office 2013 und 2010 auf demselben Laptop. Ich wollte Access VBA erhalten, um eine alte Version von Word zu öffnen, da Word 2013-Call-Outs mit dicken schwarzen Rändern gedruckt werden.

Nachdem viele Variationen ausprobiert, hier mein Code ist, die gearbeitet:

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 

ich nicht den SO-Code-Editor, dies zu zeigen, richtig bekommen, aber das Kopieren und Einfügen funktionieren sollen.

Verwandte Themen