Office アプリケーションのオートメーションでエラー 429 が発生する

文書翻訳 文書翻訳
文書番号: 828550 - 対象製品
Microsoft Office XP、Office 2000 および Office 97 については、次の資料を参照してください。244264
すべて展開する | すべて折りたたむ

目次

概要

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

この資料では、このエラー メッセージの原因となる問題の診断方法および解決方法について説明します。

詳細

Visual Basic でエラー 429 が発生する原因は複数あります。このエラーは、以下の条件のいずれかに該当する場合に発生することがあります。
  • アプリケーションに誤りがあります。
  • システム構成に誤りがあります。
  • コンポーネントが不足しています。
  • 破損しているコンポーネントがあります。
エラーの原因を特定するには、問題の切り分けを行います。エラー 429 がクライアント コンピュータで発生する場合は、以下の情報を使用して問題の切り分けを行い、Microsoft Office アプリケーションでのエラーを解決します。

: 以下の情報の中には Office 以外の COM サーバーにも該当するものがありますが、この資料では、Office アプリケーションのオートメーションの実行時を想定しています。

コードをチェックする

エラーのトラブルシューティングを行う前に、問題が発生している可能性のあるコード行を特定します。

問題が発生している可能性のあるコード行を発見したら、以下の手順を実行します。
  • コードで明示的なオブジェクト作成が使用されていることを確認します。

    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 関数は、事前バインディング、実行時バインディングのどちらのオブジェクトでも使用可能です。
  • CreateObject 関数に渡される "ProgID" 文字列が正しいこと、およびバージョンに依存しない (たとえば Excel.Application.8 ではなく Excel.Application を使用している) ことを確認します。問題が発生しているシステムに、ProgID で指定したバージョンとは異なるバージョンの 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 形式の短いパスであることを確認します。サーバーの登録に短いパス名を使用する必要はありませんが、長いパス名の途中に空白文字が含まれていると、一部のシステムで問題が発生する可能性があります。

    レジストリに格納されているサーバーのパスのキーを確認するには、レジストリ エディタを起動して、次の手順を実行します。
    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    2. regedit と入力し、[OK] をクリックします。
    3. HKEY_CLASSES_ROOT\CLSID キーに移動します。

      このキーの下に、システムに登録されているオートメーション サーバーの CLSID が存在します。
    4. オートメーションを行う Office アプリケーションに対応するキーを以下に示します。この CLSID 値と一致するキーを探して、その CLSID キーの 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}
    5. パスがファイルの実際の場所と一致しているかどうかを確認します。
    : 短いパス名が使用されていると、パスが正しくない場合でも正しいという印象を与える可能性があります。たとえば、Office と Microsoft Internet Explorer がデフォルトの場所にインストールされている場合、どちらのアプリケーションについても "C:\PROGRA~1\MICROS~X\" (X は数字) のような短いパスが表示されます。これが短いパス名であることにすぐには気が付かない可能性もあります。

    パスが正しいかどうかを判断するには、次の手順を実行します。
    1. [スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
    2. レジストリから値をコピーし、[ファイル名を指定して実行] ダイアログ ボックスにその値を貼り付けます。

      : アプリケーションを実行する前に、/automation スイッチを削除します。
    3. [OK] をクリックします。
    4. アプリケーションが正しく実行されることを確認します。

      [OK] をクリックしたときにアプリケーションが起動すれば、サーバーは正しく登録されています。起動されなければ、LocalServer32 キーの値を正しいパスで置き換えます。またそのときには、可能であれば短いパス名を使用します。
  • Normal.dot テンプレートまたは Excel.xlb リソース ファイルが破損しているかどうかのテストを行います。Word の Normal.dot テンプレート、または Excel の Excel.xlb リソース ファイルが破損している場合に Word または Excel のオートメーションを行うと、問題が発生する可能性があります。これらのファイルをテストするには、ローカルのハード ディスクを検索して、存在するすべての Normal.dot または Excel.xlb を検索します。

    : Windows 2000 または Windows XP を実行しているシステムの場合は、これらのファイルのコピーが複数存在することがあります。これらのファイルは、システムにインストールされている各ユーザー プロファイルごとに 1 つずつ存在します。

    Normal.dot ファイルまたは Excel.xlb ファイルの名前を一時的に変更し、オートメーション テストを再度実行します。これらのファイルが見つからない場合、Word および Excel によってこれらのファイルが作成されます。コードが正常に動作することを確認します。新規の Normal.dot が作成されるとコードが正常に動作する場合は、名前を変更したファイルを削除します (ファイルは破損しています)。コードが動作しない場合は、名前変更したファイルを元のファイル名に戻して、これらのファイルに保存されたユーザー設定の内容に戻します。
  • Windows 2000 を実行している場合は、管理者アカウントでアプリケーションを実行します。Office サーバーには、レジストリおよびディスク ドライブに対する読み取りおよび書き込みのアクセス許可が必要です。現在のセキュリティ設定でこのアクセス許可が拒否されている場合は、Office サーバーが適切に読み込まれない可能性があります。

システムをチェックする

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

    オートメーション ファイルは、Windows\System32 ディレクトリまたは Winnt\System32 ディレクトリにあります。以下のファイルを確認します。
    元に戻す全体を表示する
    ファイル名バージョン最終更新日サイズ
    asycfilt.dll5.1.2600.21802004/08/0565,024
    oleaut32.dll5.1.2600.21802004/08/05553,472
    olepro32.dll5.1.2600.21802004/08/0583,456
    stdole2.tlb3.50.5014.02004/08/0517,920

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

    : 上のバージョン番号と日付は、Office 2003 がインストールされた、Windows Server 2003 を実行するコンピュータのものです。これらの番号と日付は単なる一例であり、実際の値は異なる場合があります。

    ファイルのビルド番号または最終更新日が一致しない場合は、オートメーション ファイルを更新する自己解凍ユーティリティをダウンロードします。

    このランタイム ファイルへのアクセス方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    235420 [FILE] VBRun60sp4.exe による Visual Basic 6.0 SP4 ランタイム ファイルのインストール
  • システム構成ユーティリティ (Msconfig.exe) を使用して、Office アプリケーション コードの実行を妨げる可能性のあるサードパーティ製アプリケーションのサービスおよびシステム スタートアップをチェックします。 Msconfig.exe の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
    310560 Windows XP でシステム構成ユーティリティを使用してトラブルシューティングを行う方法
    たとえば、"スクリプト ブロッカ" 機能を実装するウイルス対策プログラムを実行していることが原因で、Outlook オートメーション アプリケーションが失敗することがあります。

    : これは、ネットワークに接続しないテスト システム上で一時的にウイルス対策プログラムを無効にするだけで、確認できます。

    または、Outlook で以下の手順を実行して、サードパーティのアドインを無効にします。
    1. [ツール] メニューの [オプション] をクリックします。
    2. [その他] タブで、[詳細オプション] をクリックします。
    3. [詳細オプション] ダイアログ ボックスで、[アドイン マネージャ] をクリックします。
    4. サードパーティのアドインを設定するチェック ボックスをオフにします。
    5. Outlook を再起動します。
    この方法で問題を解決できた場合は、ウイルス対策プログラムの製造元に連絡し、ウイルス対策プログラムの更新についての詳細情報を問い合わせます。

Office を再インストールする

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

関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
219423 [OFF2000] Office 2000 Disc 1 を完全に削除する方法
158658 Microsoft Office 97 を完全に削除する方法

関連情報

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

プロパティ

文書番号: 828550 - 最終更新日: 2007年6月14日 - リビジョン: 5.2
この資料は以下の製品について記述したものです。
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Office SharePoint Designer 2007
  • Microsoft Office FrontPage 2003
  • Microsoft Office Outlook 2007
  • Microsoft Office Outlook 2003
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
キーワード:?
kbexpertisebeginner kbtshoot kbprogramming kberrmsg kbautomation kbinfo KB828550
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com