Office アプリケーションを自動化すると、実行時エラー 429 が表示される

適用先
Office 2016 Office 2013

概要

Microsoft Visual Basic で New 演算子または CreateObject 関数を使用して Microsoft Office アプリケーションのインスタンスを作成すると、次のエラー メッセージが表示される場合があります。

実行時エラー '429': ActiveX コンポーネントはオブジェクトを作成できません

このエラーは、コンポーネント オブジェクト モデル (COM) が要求されたオートメーション オブジェクトを作成できず、オートメーション オブジェクトを Visual Basic で使用できない場合に発生します。 このエラーは、すべてのコンピューターで発生するわけではありません。

この資料では、このエラーの原因となる可能性のある一般的な問題を診断して解決する方法について説明します。

追加情報

Visual Basic では、エラー 429 にはいくつかの原因があります。 次のいずれかの条件に当てはまる場合、エラーが発生します。

  • アプリケーションに間違いがあります。
  • システム構成に誤りがあります。
  • コンポーネントが不足しています。
  • コンポーネントが破損しています。

エラーの原因を見つけるには、問題を特定します。 クライアント コンピューターで "429" エラー メッセージが表示される場合は、次の情報を使用して、Microsoft Office アプリケーションのエラーを特定して解決します。

注釈 次の情報の一部は、Office 以外の COM サーバーにも適用される場合があります。 ただし、この記事では、Office アプリケーションを自動化することを前提としています。

コードを確認する

エラーのトラブルシューティングを行う前に、問題の原因となっている可能性のあるコードを 1 行切り分けてみてください。

1 行のコードが問題の原因となっている可能性がある場合は、次の手順を実行します。

  • コードで明示的なオブジェクト作成が使用されていることを確認してください。

    問題を 1 つのアクションに絞り込むと、簡単に特定できます。 たとえば、次のいずれかとして使用される暗黙的なオブジェクトの作成を探します。

    コード サンプル 1

    Application.Documents.Add 'DON'T USE THIS!!
    

    コード サンプル 2

    Dim oWordApp As New Word.Application 'DON'T USE THIS!!
    '... some other code
    oWordApp.Documents.Add
    

    これらのコード サンプルでは、いずれも暗黙的なオブジェクト作成を使用します。 Microsoft Office Word 2003 は、変数が少なくとも 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
    

    明示的に呼び出しを行って各オブジェクトを個別に作成すると、問題を分離することが容易になります。 これにより、コードが読みやすくなることもあります。

  • Office アプリケーションのインスタンスを作成するときは、New 演算子ではなく CreateObject 関数を使用します。

    CreateObject 関数は、ほとんどの Microsoft Visual C++ クライアントが使用する作成プロセスを密接にマップします。 CreateObject 関数では、サーバーの CLSID をバージョン間で変更することもできます。 CreateObject 関数は、早期バインド オブジェクトと遅延バインド オブジェクトで使用できます。

  • 渡された "ProgID" 文字列
    CreateObject が正しい場合は、「ProgID」文字列がバージョンに依存しないことを確認します。 たとえば、"Excel.Application.8" 文字列を使用する代わりに "Excel.Application" 文字列を使用します。 失敗するシステムには、"ProgID" 文字列に指定したバージョンよりも古いバージョンの Microsoft Office または新しいバージョンの Microsoft Office がインストールされている可能性があります。

  • Erl コマンドを使用して、成功しなかったコード行の行番号を報告します。 これは、IDE で実行できないアプリケーションのデバッグに役立つ場合があります。 次のコードは、作成できないオートメーション オブジェクト (Microsoft Word または Microsoft Office Excel 2003) を示しています。

    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
    

    エラーを追跡するには、 MsgBox 関数と行番号を使用します。

  • 次のように遅延バインディングを使用します。

    Dim oWordApp As Object
    

    早期バインドされたオブジェクトでは、カスタム インターフェイスをプロセスの境界を越えてマーシャリングする必要があります。 CreateObject 中または New 中にカスタム インターフェイスをマーシャリングできない場合は、"429" エラー メッセージが表示されます。 遅延バインド オブジェクトは、カスタム プロキシをマーシャリングする必要のない IDispatch システム定義インターフェイスを使用します。 遅延バインド オブジェクトを使用して、このプロシージャが正しく機能することを確認します。

    オブジェクトが早期バインドされているときにのみ問題が発生する場合、問題はサーバー アプリケーションにあります。 通常は、この資料の「オートメーション サーバーの検証」の説明に従ってアプリケーションを再インストールし、問題を修正できます。

オートメーション サーバーを検査する

CreateObject または New を使用したときにエラーが発生する最も一般的な理由は、サーバー アプリケーションに影響を与える問題です。 通常、アプリケーションの構成またはアプリケーションのセットアップが原因で問題が発生します。 トラブルシューティングを行うには、次の方法を使用します。

  • 自動化する Office アプリケーションがローカル コンピューターにインストールされていることを確認します。 アプリケーションを実行できることを確認します。 これを行うには、[ スタート] をクリックし、
    アプリケーションを実行してから、実行してみます。 アプリケーションを手動で実行できない場合、自動化によってアプリケーションは動作しません。

  • 次のようにアプリケーションを再登録します。

    1. [スタート] をクリックし、[ファイル名を指定して実行] をクリックします。

    2. [ ファイル名を指定して実行] ダイアログ ボックスで、サーバーのパスを入力し、行の末尾に /RegServer を追加します。

    3. [OK] をクリックします。

      アプリケーションはサイレント実行されます。 アプリケーションが COM サーバーとして再登録されます。

    レジストリ キーがないために問題が発生した場合は、通常、これらの手順で問題が解決します。

  • 自動化するアプリケーションの CLSID の下にある LocalServer32 キーを調べます。 LocalServer32 キーがアプリケーションの正しい場所を指していることを確認します。 パス名は短いパス (DOS 8.3) 形式であることを確認します。 短いパス名を使用してサーバーを登録する必要はありません。 ただし、スペースが埋め込まれた長いパス名は、一部のシステムで問題を引き起こす可能性があります。

    サーバーに保存されているパス キーを調べるには、次のように Windows レジストリ エディターを起動します。

    1. [スタート] をクリックし、[ファイル名を指定して実行] をクリックします。

    2. regedit」と入力して、[OK] をクリックします。

    3. HKEY_CLASSES_ROOT\CLSID キーに移動します。

      システムに登録されているオートメーション サーバーの CLSID は、このキーの下にあります。

    4. CLSID キーの次の値を使用して、自動化する Office アプリケーションを表すキーを見つけます。 CLSID キーの LocalServer32 キーでパスを調べます。

      Office サーバー CLSID キー
      Access.Application {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
      Excel.Application {00024500-0000-0000-C000-0000000000046}
      Outlook.Application {0006F03A-0000-0000-C000-0000000000046}
      PowerPoint.Application {91493441-5A91-11CF-8700-00AA0060263B}
      Word.アプリケーション {000209FF-0000-0000-C000-0000000000046}
    5. パスを確認して、ファイルの実際の場所と一致していることを確認します。

    注釈 短いパス名は、正しくない場合に正しく見える場合があります。 たとえば、Office と Microsoft Internet エクスプローラー (既定の場所にインストールされている場合) はどちらも、C:\PROGRA~1\MICROS~X\ に似た短いパスを持っています (ここで、
    X は数値です)。 この名前は、最初は短いパス名では見えない場合があります。

    パスが正しいかどうかを判断するには、次の手順を実行します。

    1. [スタート] をクリックし、[ファイル名を指定して実行] をクリックします。

    2. レジストリから値をコピーし、[ ファイル名を指定して実行] ダイアログ ボックスに値を貼り付けます。

      注釈 アプリケーションを実行する前に、 /automation スイッチを削除してください。

    3. [OK] をクリックします。

    4. アプリケーションが正しく実行されたことを確認します。

      [ OK] をクリックした後にアプリケーションが実行された場合、サーバーは正常に登録されています。 [ OK] をクリックしてもアプリケーションが実行されない場合は、LocalServer32 キーの値を正しいパスに置き換えます。 可能であれば、短いパス名を使用します。

  • Normal.dot テンプレートまたは Excel.xlb リソース ファイルの破損の可能性をテストします。 Word の Normal.dot テンプレートまたは Excel の Excel.xlb リソース ファイルのいずれかが破損している場合、Microsoft Word または Microsoft Excel を自動化すると問題が発生することがあります。 これらのファイルをテストするには、ローカル ハード ディスクで Normal.dot または Excel.xlb のすべてのインスタンスを検索します。

    注釈 これらのファイルのコピーが複数見つかる場合があります。 システムにインストールされているユーザー プロファイルごとに、これらのファイルの各コピーが 1 つずつ存在します。

    Normal.dot ファイルまたは Excel.xlb ファイルの名前を一時的に変更してから、オートメーション テストを再実行します。 Word と Excel の両方で、見つからない場合はこれらのファイルを作成します。 コードが機能することを確認します。 新しい Normal.dot ファイルが作成されたときにコードが機能する場合は、名前を変更したファイルを削除します。 これらのファイルは破損しています。 コードが機能しない場合は、これらのファイルを元のファイル名に戻して、これらのファイルに保存されているカスタム設定を保存する必要があります。

  • Administrator アカウントでアプリケーションを実行します。 Office サーバーでは、レジストリとディスク ドライブに対する読み取り/書き込みアクセスが必要です。 現在のセキュリティ設定で読み取り/書き込みアクセスが拒否されている場合、Office サーバーが正しく読み込まれない可能性があります。

システムを調べる

システム構成によっては、アウトプロセス COM サーバーの作成に関する問題が発生する場合もあります。 トラブルシューティングを行うには、エラーが発生したシステムで次の方法を使用します。

  • プロセス外のサーバーで問題が発生しているかどうかを確認します。 特定の COM サーバー (Word など) を使用するアプリケーションがある場合は、別のアウトプロセス サーバーをテストして、COM レイヤー自体で問題が発生しないことを確認します。 コンピューター上でアウトプロセス COM サーバーを作成できない場合は、この資料の「Microsoft Office の再インストール」の説明に従って OLE システム ファイルを再インストールするか、オペレーティング システムを再インストールして問題を解決します。

  • オートメーションを管理する OLE システム ファイルのバージョン番号を調べます。 通常、これらのファイルはセットとしてインストールされます。 これらのファイルはビルド番号と一致する必要があります。 セットアップ ユーティリティが正しく構成されていないと、誤ってファイルが個別にインストールされる可能性があります。 これにより、ファイルが一致しなくなります。 自動化で問題が発生しないようにするには、ファイルを調べて、ファイルのビルドが一致していることを確認します。

    オートメーション ファイルは、Windows\System32 ディレクトリにあります。 次のファイルを調べます。

    ファイル名 バージョン 更新日
    Asycfilt.dll 10.0.16299.15 2017 年 9 月 29 日
    Ole32.dll 10.0.16299.371 2018 年 3 月 29 日
    Oleaut32.dll 10.0.16299.431 2018 年 5 月 3 日
    Olepro32.dll 10.0.16299.15 2017 年 9 月 29 日
    Stdole2.tlb 3.0.5014 2017 年 9 月 29 日

    ファイルのバージョンを調べるには、Windows エクスプローラーでファイルを右クリックし、[プロパティ] をクリックします。 ファイル バージョンの最後の 4 桁 (ビルド番号) と最後にファイルが変更された日付をメモします。 これらの値がすべてのオートメーション ファイルで同じであることを確認します。

    注釈次のファイルは、Windows 10 バージョン 1709、ビルド 16299.431 用です。 これらの数値と日付は単なる例です。 値が異なる場合があります。

  • システム構成ユーティリティ (Msconfig.exe) を使用して、Office アプリケーションでのコードの実行を制限する可能性があるサード パーティ アプリケーションのサービスやシステムのスタートアップを調べます

    注釈 ネットワークに接続されていないテスト システムでのみ、ウイルス対策プログラムを一時的に無効にします。

    または、Outlook で次の手順に従って、サードパーティのアドインを無効にします。

    この方法で問題が解決した場合は、サード パーティのウイルス対策ベンダーに問い合わせて、ウイルス対策プログラムの更新の詳細を確認してください。

    1. [ ファイル ] メニューの [オプション] をクリックし、[ アドイン] をクリックします。

    2. [ COM アドインの管理] をクリックし、[ 設定] をクリックします。

      注釈 [ COM アドイン ] ダイアログ ボックスが開きます。

    3. サードパーティのアドインのチェック ボックスをオフにし、[OK] をクリックします。

    4. Outlook を再起動します。

Office の再インストール

上記のいずれの手順でも問題が解決しない場合は、Office を削除してから再インストールします。

詳細については、次の Office の記事を参照してください。

Office 365 または Office 2016 を PC または Mac にダウンロードしてインストールまたは再インストールする

参考資料

Office オートメーションとコード サンプルの詳細については、次のマイクロソフト Web サイトを参照してください。

Office 開発を始める