10

Word2007と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

しかし、どちらもWord2010を開いています

また、を使用して早期バインディングを試しました

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

Word 12.0オブジェクトモデルへの参照を設定しますが、これでもWord2010が開きます ここに画像の説明を入力してください

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
4

5 に答える 5

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もう1つの方法は、コマンドでドキュメント名を渡してから、ドキュメント名でGetObject呼び出すことができます。

于 2012-08-22T13:49:35.693 に答える
1

これにより、コードが機能する場合と機能しない場合がある理由がさらに説明される場合があります。

コマンドの状況に関する私の観察

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

コンピュータで動作するかどうかは、Microsoftから入手した最新のアップデートの機能であるということです。

私がこれを信じる理由:

一部のレガシーアプリとの下位互換性のために、テキストファイルをWordドキュメントに変換するアプリケーションがあります。最善の計画には、レガシーアプリが設計されたバージョンと同様のバージョンのWordを使用することが含まれます。その結果、コンピューターのデフォルトのオファリングであるWord 2010とは対照的に、レガシーバージョンのWordを呼び出す方法を検索しました。

このディスカッションチェーンに記載されている解決策は、私の質問に対する答えを提供しました。(Stack Overflowの貢献者に感謝します!)Word XPを使用したかったので、ディレクトリを調べて、Word XP(別名Word 2002)がOffice 10のメンバーであることを確認したので、コマンドを作成しました

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

私のプログラムはWord2002を立ち上げ、世界は幸せな場所でした。

週末に、私は自分のコンピューターをアップデートしました。構成の変更を監視できるように、更新がいつ発生するかを制御できるアプリを介して更新を制御します。今朝(9/30/13)Wordが更新されたコンピューターの電源を入れました。先週からアプリを1回実行するまで、これを知りませんでした。アプリは正常に動作し、期待どおりにWord2002を呼び出しました。

しかし、それから、それ自体をインストールしていたWord2010の更新を通知するバナーページを取得しました。

その後、先週と今日に一度、私にとって非常にうまく機能したアプリを実行しました。現在、Wordの更新後(直後!)、Word 2002を呼び出すコマンドラインが変更されていないにもかかわらず、同じコードでWord2010が起動するようになりました。

これは、Microsoftの更新により、以前はVBコードが期待どおりに機能することを許可していた設定が微調整されたことを示す強力な証拠のようです。これはMicrosoftの注意を引くのに良い項目かもしれないので、将来のリリースで一貫した動作を可能にするために、後続の更新パッケージでこの項目を安定させることができるかどうかを確認してください。

これがお役に立てば幸いです。

JeffK

于 2013-09-30T16:50:50.273 に答える
1

私はこれで半日を無駄にしました、そして他の人が同じことをするのを防ぐのを手伝いたいです!同じラップトップでWindows7とOffice2013および2010を実行しています。Word 2013の呼び出しは太い黒の境界線で印刷されているため、AccessVBAで古いバージョンのWordを開くようにしたかったのです。

多くのバリエーションを試しましたが、うまくいったコードは次のとおりです。

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コードエディタにこれを正しく表示させることはできませんが、コピーと貼り付けは機能するはずです。

于 2015-05-12T08:27:19.793 に答える
0

これはVB.NETソリューションです。

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

これは少し怖い人もいますが、これを解決できるレジストリ編集があるかもしれません。使用できるMSOfficeのバージョンが1つしかないため、テストできませんが、以前のバージョンにはまだレジストリキーが残っています。

レジストリで2007バージョンのWordを見つけました。デフォルトの場所は、C:\ program Files \ Microsoft Office \ Office14 \ WINWORD.EXE "で、古いバージョンのWordが新しいデフォルトとして最新バージョンのインストール場所に登録されていることを示しています。

あなたができるかもしれないことは、レジストリの場所に移動することです

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

(デフォルト)キーを「C:\ programFiles \ Microsoft Office \ Office12 \WINWORD.EXE」/n「%1」に変更します。

理論的にはいつでも

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

が呼び出されると、実行可能ファイルの場所についてレジストリをプローブし、正しいパスを見つけることができます。

于 2012-08-22T14:14:37.860 に答える
0

私も同様の問題を抱えていましたが、将来これに遭遇した人たちのために私の経験を詳しく説明したいと思いました。

私の状況では、ユーザーがいくつかのExcelファイルを選択し、データからテーブルを作成するためのファイルダイアログを開くことになっているPowerpointマクロがありました。最近Excel2003をインストールするまで、問題はありませんでした。PowerpointがExcel 2003ファイルダイアログを開いていたため、*。xlsxファイルを選択しようとするとエラーが発生していました。Excel.Application.10Excelオブジェクトを作成するためにコードを使用したか、コード内で使用したかは関係ありませんExcel.Application.14。常にExcel2003ファイルダイアログでした。

Explorerで、*。xlsxファイルがExcel 2010で開かれるように設定され、*。xlsファイルがExcel2003で開かれるように設定されていることに気付きました。2010年に開かれる*.xlsファイルを通常の方法でリセットしようとしました。 。レジストリキーを削除してOffice2010を修復する必要がありました。2010年にすべてのExcelファイルが開いたので、問題は修正されました。

私の問題はあなたの問題とは少し異なっていたと思いますが、私の経験が解決策につながると思います。どのソリューションも、レジストリの編集に依存することになると思います。

于 2014-10-28T16:38:06.077 に答える