[INFO] Office アプリケーションのオートメーション時にエラー 429 が発生する

概要

Microsoft Visual Basic で New 演算子や CreateObject 関数を使用して Microsoft Office アプリケーションのインスタンスを作成するときに、次のエラー メッセージが表示される場合があります。
実行時エラー '429': ActiveX コンポーネントはオブジェクトを作成できません。
このエラーは、要求されたオートメーション オブジェクトが COM によって作成できず、Visual Basic で使用できない場合に発生します。このエラーは通常、特定のコンピュータでのみ発生します。


この資料では、このエラーの原因であることが確認されている一般的な問題の診断および解決に役立つ、トラブルシューティングのヒントを紹介します。

詳細

Visual Basic の一部のエラーとは異なり、エラー 429 の原因は 1 つではありません。この問題は、アプリケーションやシステムの構成のエラーが原因で発生することも、コンポーネントの紛失や破損が原因で発生することもあります。正確な原因を特定するには、消去法を使用します。クライアント コンピュータでこのエラーが発生した場合に、エラーを切り分けて解決するには、いくつかの項目を確認する必要があります。


以降の項目では、Office アプリケーションで作業をしているときに、このエラーのトラブルシューティングを行う方法をいくつか紹介します。この情報の一部は、Office 以外の COM サーバーにも該当する場合がありますが、この資料では、Microsoft Office のオートメーションの実行時を想定しています。

コードを確認する

最初に問題を探す場所は、コード内です。エラーのトラブルシューティングを行う前に、エラーの発生場所を知る必要があります。エラーの場所を、1 行のコードまで絞り込んでください。


エラーが発生しているコードが見つかったら、以下の作業を行います。

  • コードで明示的なオブジェクト作成が使用されていることを確認します。問題を 1 つのアクションまで絞り込むことができれば、どんな問題でも簡単に確認および識別できます。たとえば、以下の方法は使用しないようにします。
    Application.Documents.Add 'DON'T USE THIS!!
    または
    Dim oWordApp As New Word.Application 'DON'T USE THIS!!
    '... some other code
    oWordApp.Documents.Add
    これらの方法では、暗黙的なオブジェクト作成が使用されています。Microsoft Word は、この変数が 1 回以上呼び出されなければ起動しません。この変数はプログラムの別の部分で呼び出される可能性があるため、問題発生箇所の特定が困難になるおそれがあります。また、この場合、Application オブジェクトと Document オブジェクトのどちらの作成に問題があるかが明確になりません。


    代わりに、明示的な呼び出しを行って、各オブジェクトを別々に作成します。
    Dim oWordApp As Word.Application
    Dim oDoc As Word.Document
    Set oWordApp = CreateObject("Word.Application")
    '... some other code
    Set oDoc = oWordApp.Documents.Add
    これにより、問題の切り分けが簡単になり、コードが読みやすくなります。
  • Microsoft Office アプリケーションのインスタンスを作成する場合は、New ではなく CreateObject を使用します。CreateObject は、多くの Visual C++ クライアントで使用されている作成プロセスに、より密接にマップし、バージョン間でサーバーの CLSID が変更されても対応できます。CreateObject は、事前バインディングと実行時バインディングの両方のオブジェクトで使用できます。
  • CreateObject に渡される ProgID 文字列が正しく、バージョンに依存しない (たとえば、"Excel.Application.8" ではなく "Excel.Application" を使用する) ことを確認します。エラーが発生しているシステムに、ProgID で指定したバージョンとは異なるバージョンの Microsoft Office が含まれている可能性があります。
  • IDE で実行できないアプリケーションをデバッグするために、Erl コマンドを使用して、エラーが発生している行の行番号を報告します。たとえば、以下のコードでは、どの Application オブジェクト (Word または Excel) が作成できないかがわかります。
    Dim oWord As Word.Application
    Dim oExcel As Excel.Application
    On Error Goto err_handler
    1: Set oWord = CreateObject("Word.Application")
    2: Set oExcel = CreateObject("Excel.Application")
    ' ... some other code
    err_handler:
    MsgBox "The code failed at line " & Erl, vbCritical
    メッセージ ボックスと行番号を組み合わせて使用して、エラーを追跡します。
  • 実行時バインディング (Dim oWordApp As Object) を使用します。事前バインディング オブジェクトでは、プロセスの境界を越えてカスタム インターフェイスをマーシャリングする必要があります。CreateObject または New の実行中にカスタム インターフェイスのマーシャリングに問題が発生すると、エラー 429 が表示されます。実行時バインディング オブジェクトで使用されるシステム定義のインターフェイス (IDispatch) では、マーシャリングするためのカスタム プロキシは不要です。実行時バインディング オブジェクトを使用して、状況が変わるかどうかを確認します。


    オブジェクトが事前バインディングである場合にのみ問題が発生する場合、問題はサーバー アプリケーションにあります。この場合、通常は、アプリケーションを再インストールすることによって修正できます (下記参照)。
  • ASP または MTS コンポーネントから自動化する場合は、Server.CreateObject() の代わりに CreateObject を使用します。Server.CreateObject を使用すると、Microsoft Office の問題の原因であることが確認されている MTS パッケージの ID で、Office アプリケーションのインスタンスが作成されます。

オートメーション サーバーを確認する

CreateObject または New のエラーの最も一般的な理由は、サーバー アプリケーション自体の問題です。通常、これらの問題は、アプリケーションの構成または設定にあります。以下の点を確認してください。

  • 自動化する Microsoft Office アプリケーションが、ローカル コンピュータにインストールされていることを確認し、[スタート] メニューの [ファイル名を指定して実行] を使用してアプリケーションを起動できることを確認します。プログラムを手動で起動できない場合は、オートメーションを完了させることはできません。
  • [スタート] メニューの [ファイル名を指定して実行] をクリックして表示されるダイアログ ボックスに、サーバーのパスを入力し、行末に「/RegServer」を追加します。[OK] をクリックすると、アプリケーションがサイレント モードで実行され、COM サーバーとして再登録されます。レジストリの紛失が問題である場合は、通常はこの方法で修正されます。
  • 自動化するアプリケーションの CLSID の下の LocalServer32 キーを確認します。LocalServer32 キーにアプリケーションの正しいパスが指定されていることと、パス名が DOS の 8.3 形式の短いパスであることを確認します。サーバーの登録に短いパス名を使用する必要はありませんが、長いパス名の途中に空白文字が含まれていると、一部のシステムで問題が発生することが知られています (以下参照)。


    サーバー用に格納されているパス キーを確認するには、[スタート] メニューの [ファイル名を指定して実行] をクリックし、表示されるダイアログ ボックスに regedit と入力して Windows レジストリ エディタを起動します。HKEY_CLASSES_ROOT\Clsid キーに移動します。このキーの下に、システムで登録されているオートメーション サーバーの CLSID があります。以下の値を使用して、自動化する Office アプリケーションのキーを探し、その LocalServer32 キーに登録されているパスを確認します。

    +========================+=========================================+
    | Office サーバー | CLSID キー |
    +========================+=========================================+
    | Access.Application | {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} |
    +------------------------+-----------------------------------------+
    | Excel.Application | {00024500-0000-0000-C000-000000000046} |
    +------------------------+-----------------------------------------+
    | FrontPage.Application | {04DF1015-7007-11D1-83BC-006097ABE675} |
    +------------------------+-----------------------------------------+
    | Outlook.Application | {0006F03A-0000-0000-C000-000000000046} |
    +------------------------+-----------------------------------------+
    | PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B} |
    +------------------------+-----------------------------------------+
    | Word.Application | {000209FF-0000-0000-C000-000000000046} |
    +------------------------+-----------------------------------------+
    パスがファイルの実際の場所と一致していることを確認します。短いパス名が使用されていると、パスが正しくない場合でも正しく見える場合があります。たとえば、Microsoft Office と Microsoft Internet Explorer のパスは、デフォルトの場所にインストールされている場合、いずれも "C:\PROGRA~1\MICROS~X\" (X は数字) のような短いパスになります。短いパス名が使用されていると、一致しているかどうかの判断がすぐにはつきません。


    レジストリから値をコピーし、[スタート] メニューの [ファイル名を指定して実行] をクリックして表示されるダイアログ ボックスに貼り付けると、パスが本当に正しいことをテストできます (/Automation スイッチを削除してからアプリケーションを実行してください)。[OK] をクリックしたときにアプリケーションが起動すれば、サーバーは正しく登録されています。起動しない場合は、LocalServer32 キーの値を正しいパスに置き換える必要があります (可能であれば短いパス名を使用します)。
  • Normal.dot テンプレート (Word) または Excel.xlb リソース ファイル (Excel) が破損している場合に Word または Excel の自動化を行うと、問題が発生することが知られています。破損しているかどうかをテストするには、ローカルのハード ディスクを検索して、Normal.dot または *.xlb のすべてのインスタンスを探します (Windows 2000、Windows NT、Windows 95/98 のいずれかを、プロファイルを有効にして実行している場合は、これらのファイルが、システム上のユーザー プロファイルごとに 1 つずつ、複数見つかる場合があります)。Normal.dot ファイルまたは *.xlb ファイルの名前を一時的に変更して、オートメーション テストを再度実行します (Word および Excel では、これらのファイルが見つからない場合、自動的に作成されます)。コードが機能すれば、名前を変更したファイルは破損しているため、削除する必要があります。コードが機能しない場合は、ファイル名を元の名前に戻して、これらのファイルに保存されているカスタム設定が失われないようにします。
  • Windows NT、Windows 2000、Windows XP、Windows Server 2003 のいずれかのシステムでは、管理者アカウントを使用してアプリケーションを実行します。Office サーバーには、レジストリおよびディスク ドライブに対して読み取りおよび書き込みのアクセス権が必要です。現在のセキュリティ設定でこの特権が拒否されている場合は、適切に読み込みができない場合があります。

システムを確認する

システム構成によっては、アウト プロセスの COM サーバーの作成時に問題が発生する可能性があります。エラーが発生するシステムで、以下の点を確認してください。
  • 問題が、アウト プロセス サーバーで発生するかどうかを確認します。特定の COM サーバーのみを使用するアプリケーション (Word など) がある場合は、別のアウト プロセス サーバーをテストして、問題が COM 層自体にないことを確認します。そのシステムでアウト プロセス COM サーバーが作成できない場合、問題を解決するには、OLE システム ファイル (下記参照) を再インストールするか、オペレーティング システムを再インストールする必要があります。
  • オートメーションを管理する OLE システム ファイルのバージョン番号を確認します。これらのファイルは通常、セットでインストールされるため、ビルド番号は一致しています。セットアップ ユーティリティの構成が不適切な場合は、ファイルが誤って別々にインストールされ、バージョンの不一致が発生する可能性があります。オートメーションの問題を回避するには、ファイルをチェックして、ファイルのビルドが一致することを確認します。


    オートメーション ファイルは Windows\System ディレクトリまたは Winnt\System32 ディレクトリにあります。確認が必要なファイルは以下のとおりです。

    +---------------+-------------+----------------+
    | ファイル名 | バージョン | 変更日 |
    +---------------+-------------+----------------+
    | Asycfilt.dll | 2.40.4275 | March 08, 1999 |
    | Oleaut32.dll | 2.40.4275 | March 08, 1999 |
    | Olepro32.dll | 5.0.4275 | March 08, 1999 |
    | Stdole2.tlb | 2.40.4275 | March 08, 1999 |
    +---------------+-------------+----------------+
    ファイルのバージョンを確認するには、エクスプローラでファイルを右クリックし、ポップアップ メニューの [プロパティ] をクリックします。最も重要な値は、ファイル バージョンの下 4 桁 (ビルド番号) と最終変更日です。すべてのオートメーション ファイルでこれらの値が同じであることを確認します。


    上記のバージョン番号と日付は単なる例であり、実際の値とは異なる場合があります。重要なのは、すべてのファイルでこれらの値が一致することであり、この表と一致することではありません。


    ファイルのビルド番号または変更日が一致しない場合は、オートメーション ファイルを更新する自己解凍ユーティリティをダウンロードします。
    関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    290887 [FILE] VBRun60sp5.exe による Visual Basic 6.0 SP5 ランタイム ファイルのインストール
  • Windows NT 4.0 には、オートメーション サーバーが存在するフォルダの名前に空白文字が含まれているか、オートメーション サーバーが存在するフォルダの名前と類似していて、最初の 8 文字がまったく同じである別のフォルダがシステム上にある場合に、オートメーション サーバーの起動に問題があることがわかっています。たとえば、システム上に C:\Program Stuff\SomeFolder というフォルダがある場合、C:\Program Files\SomeFolder 内にあるサーバーは、CreateObject に対する呼び出し中に起動できない場合があります。詳細については、以下の「サポート技術情報」 (Microsoft Knowledge Base) を参照してください。
    この問題およびその回避手順の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    185126 [BUG] Windows NT 4.0 で COM/OLE サーバーを起動できない

Microsoft Office を再インストールする

上記の手順で問題が解決しない場合は、Microsoft Office をアンインストールして再インストールすることを検討してください。マイクロソフトでは、既存のバージョンをアンインストールしてから、元のインストール ディスクを使用して再インストールすることをお勧めします。


削除されるアイテムの完全な一覧については、以下の「サポート技術情報」 (Microsoft Knowledge Base) を参照してください。
219423 [OFF2000] Office 2000 Disc 1 を完全に削除する方法
158658
[OFF97] Microsoft Office 97 を完全に削除する方法

関連情報

'429' のエラー メッセージのトラブルシューティグの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
240377 [HOWTO] Jet 3.5 が正常にインストールされていることを確認する (パートI)
Microsoft Office のオートメーションに関する最新の情報およびサンプル コードについては、以下のマイクロソフト サポート オンラインのページを参照してください。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 244264 (最終更新日 2004-06-28) を基に作成したものです。


この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
プロパティ

文書番号:244264 - 最終更新日: 2004/09/30 - リビジョン: 1

フィードバック