概要
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回呼び出されるまで開始されません。 この変数はプログラムの別の部分で呼び出される可能性があるため、問題は見つけるのが難しい場合があります。 アプリケーションオブジェクトが作成されたとき、またはドキュメントオブジェクトが作成されたときに問題が発生しているかどうかを確認するのが難しい場合があります。 代わりに、次のように、各オブジェクトを個別に作成するための明示的な呼び出しを行うことができます。
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." という文字列を使う代わりに、"Excel." という文字列を使用します。 問題が発生したシステムでは、古いバージョンの Microsoft Office、または "ProgID" 文字列で指定したバージョンよりも新しいバージョンの 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中または新規にカスタムインターフェイスをマーシャリングできない場合、"429" エラーメッセージが表示されます。 遅延バインドオブジェクトは、カスタムプロキシをマーシャリングする必要がない IDispatch システム定義インターフェイスを使います。 この手順が正しく動作することを確認するには、遅延バインドオブジェクトを使います。 オブジェクトが事前にバインドされている場合にのみ問題が発生する場合は、サーバーアプリケーションで問題が発生しています。 通常、問題を修正するには、この記事の「オートメーションサーバーを調査する」セクションで説明されているように、アプリケーションを再インストールすることができます。
オートメーションサーバーを調べる
CreateObjectまたはNewを使用するときに発生するエラーの最も一般的な原因は、サーバーアプリケーションに影響する問題です。 通常、アプリケーションの構成やアプリケーションのセットアップによって問題が発生します。 トラブルシューティングするには、次の方法を使用します。
-
自動で使用する Office アプリケーションがローカルコンピューターにインストールされていることを確認します。 アプリケーションを実行できることを確認します。 この操作を行うには、[ スタート] をクリックし、 を実行して、アプリケーションを実行します。 アプリケーションを手動で実行できない場合、アプリケーションはオートメーションで動作しません。
-
アプリケーションを再登録するには、次の手順を実行します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
-
[ 実行 ] ダイアログボックスで、サーバーのパスを入力し、行の末尾に「文字 の追加」 と入力します。
-
[OK] をクリックします。 アプリケーションはサイレントモードで実行されます。 アプリケーションは COM サーバーとして再登録されます。
レジストリキーが存在しないために問題が発生する場合、通常、この手順を実行すると問題が解決されます。
-
-
自動化するアプリケーションの CLSID の下にある LocalServer32 キーを調べます。 LocalServer32 キーがアプリケーションの適切な場所を指していることを確認します。 パス名が短いパス (DOS 8.3) 形式になっていることを確認します。 短いパス名を使用してサーバーを登録する必要はありません。 ただし、スペースが埋め込まれた長いパス名では、一部のシステムで問題が発生する可能性があります。 サーバーに保存されているパスキーを確認するには、次のように Windows レジストリエディターを起動します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
-
「 Regedit」と入力して、[ OK]をクリックします。
-
[HKEY_CLASSES_ROOT \ CLSID キーに移動します。 システムに登録されているオートメーションサーバーの Clsid はこのキーの下にあります。
-
次の CLSID キーの値を使用して、自動化する Office アプリケーションを表すキーを見つけます。 パスの CLSID キーの LocalServer32 キーを調べます。
Office server
CLSID キー
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.Application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-000000000046}
-
パスを確認して、ファイルの実際の場所と一致していることを確認します。
注: 短いパス名が正しくない場合は、正しく表示されることがあります。 たとえば、Office と Microsoft Internet Explorer の両方 (既定の場所にインストールされている場合) は、C:\PROGRA ~ 1 \ MICROS ~X\ (場所) に似た短いパスを持っています。 X は数値)。 この名前は、最初の短いパス名のように表示されない可能性があります。 パスが正しいかどうかを判断するには、次の手順を実行します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
-
レジストリから値をコピーし、[ファイルを指定して 実行 ] ダイアログボックスに値を貼り付けます。 注: アプリケーションを実行する前に、 /automation スイッチを削除します。
-
[OK] をクリックします。
-
アプリケーションが正常に実行されていることを確認します。 [ OK] をクリックした後にアプリケーションを実行すると、サーバーが正しく登録されます。 [ OK] をクリックした後にアプリケーションが実行されない場合は、LocalServer32 キーの値を正しいパスに置き換えます。 可能な場合は、短いパス名を使用します。
-
-
Normal.dot テンプレートまたは .xlb リソースファイルが破損している可能性があるかテストします。 Word または excel の .xlb リソースファイルの normal.dot テンプレートが破損している場合、Microsoft Word または Microsoft Excel を自動化すると、問題が発生する可能性があります。 これらのファイルをテストするには、ローカルのハードディスクで normal.dot または .xlb のすべてのインスタンスを検索します。 注: これらのファイルのコピーが複数見つかります。 システムにインストールされている各ユーザープロファイルについて、各ファイルのコピーが1つ用意されています。 通常の .dot ファイルまたは .xlb ファイルの名前を一時的に変更して、オートメーションテストを再実行します。 Word と Excel のどちらも、これらのファイルが見つからない場合に作成されます。 コードが動作することを確認します。 新しい normal.dot ファイルが作成されたときにコードが動作する場合は、名前を変更したファイルを削除します。 これらのファイルは破損しています。 コードが機能しない場合は、これらのファイルを元のファイル名に戻して、これらのファイルに保存されているカスタム設定を保存する必要があります。
-
管理者アカウントでアプリケーションを実行します。 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 アプリケーションで実行されているコードを制限しているサードパーティ製のアプリケーションのサービスおよびシステム起動を確認します。 Msconfig.exe の詳細については、次の Microsoft サポート技術情報の記事を参照してください。
181966 システム構成ユーティリティのアドバンストラブルシューティングの設定 たとえば、"スクリプトブロッカー" 機能を備えたウイルス対策プログラムを実行しているために、Outlook オートメーションアプリケーションが失敗することがあります。 注: ネットワークに接続されていないテストシステムでのみ、ウイルス対策プログラムを無効にします。 または、Outlook の次の手順に従って、サードパーティのアドインを無効にします。 この方法で問題が解決した場合は、ウイルス対策プログラムの更新について、サードパーティのウイルス対策ベンダーに問い合わせてください。
-
[ ファイル] メニューの [ オプション] をクリックし、[ アドイン] をクリックします。
-
[ COM アドインの管理] をクリックし、 [設定] をクリックします。 注: [ COM アドイン] ダイアログボックスが開きます。
-
サードパーティアドインのチェックボックスをオフにして、[ OK]をクリックします。
-
Outlook を再起動します。
-
Office を再インストールする
上記の手順で問題が解決しない場合は、Office を削除してから再インストールします。
詳細については、次の Office の記事を参照してください。
Office 365 または Office 2016 を PC または Mac にダウンロードしてインストールまたは再インストールする
参照情報
Office オートメーションとコードサンプルの詳細については、次の Microsoft web サイトを参照してください。