概要
Microsoft Visual Basic で New 演算子または CreateObject 関数を使用して Microsoft Office アプリケーションのインスタンスを作成すると、次のエラー メッセージが表示されることがあります。
実行時エラー '429': ActiveX コンポーネントでオブジェクトを作成できない
このエラーは、コンポーネント オブジェクト モデル (COM) が要求された Automation オブジェクトを作成できず、Automation オブジェクトが 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 関数は、事前バインド オブジェクトと遅延バインド オブジェクトで使用できます。
-
CreateObject に渡される "ProgID" 文字列が正しいことを確認し、"ProgID" 文字列がバージョンに依存しないかどうかを確認します。 たとえば、"Excel.Application.8" 文字列を使用する代わりに、"Excel.Application" 文字列を使用します。 失敗したシステムには、"ProgID" 文字列で指定したバージョンよりも古いバージョンの Microsoft Office または新しいバージョンの Microsoft Office が存在する可能性があります。
-
Erl コマンドを使用して、成功しないコード行の行番号を報告します。 これは、IDE で実行できないアプリケーションをデバッグするのに役立つ場合があります。 次のコードは、作成できない Automation オブジェクト (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, vbCriticalMsgBox 関数と行番号を使用して、エラーを追跡します。
-
次のように遅延バインディングを使用します。
Dim oWordApp As Object
初期バインド オブジェクトでは、プロセス境界を越えてカスタム インターフェイスをマーシャリングする必要があります。 CreateObject または New の間にカスタム インターフェイスをマーシャリングできない場合は、"429" エラー メッセージが表示されます。 遅延バインド オブジェクトは、カスタム プロキシをマーシャリングする必要のない IDispatch システム定義インターフェイスを使用します。 遅延バインド オブジェクトを使用して、このプロシージャが正しく動作することを確認します。オブジェクトが事前バインドされている場合にのみ問題が発生した場合、問題はサーバー アプリケーションにあります。 通常、この記事の「Automation Server を調べる」セクションで説明されているように、アプリケーションを再インストールして問題を修正できます。
オートメーション サーバーを調べる
CreateObject または New を使用するときにエラーが発生する最も一般的な理由は、サーバー アプリケーションに影響を与える問題です。 通常、アプリケーションの構成またはアプリケーションのセットアップによって問題が発生します。 トラブルシューティングを行うには、次の方法を使用します。
-
自動化する Office アプリケーションがローカル コンピューターにインストールされていることを確認します。 アプリケーションを実行できることを確認します。 これを行うには、[スタート] をクリックし、[実行] をクリックして、アプリケーションの実行を試みます。 アプリケーションを手動で実行できない場合、アプリケーションは自動化によって動作しません。
-
アプリケーションを次のように再登録します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
-
[ 実行 ] ダイアログ ボックスで、サーバーのパスを入力し、行の末尾に /RegServer を追加します。
-
[OK] をクリックします。アプリケーションはサイレントで実行されます。 アプリケーションは COM サーバーとして再登録されます。
レジストリ キーが見つからないために問題が発生した場合は、通常、この問題を修正します。
-
-
自動化するアプリケーションの CLSID の下にある LocalServer32 キーを調べます。 LocalServer32 キーがアプリケーションの正しい場所を指していることを確認します。 パス名が短いパス (DOS 8.3) 形式であることを確認します。 短いパス名を使用してサーバーを登録する必要はありません。 ただし、埋め込みスペースを含む長いパス名は、一部のシステムで問題を引き起こす可能性があります。サーバーに格納されているパス キーを調べるには、次のように Windows レジストリ エディターを起動します。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
-
「regedit」と入力し、[OK] をクリックします。
-
HKEY_CLASSES_ROOT\CLSID キーに移動します。システム上の登録済み自動化サーバーの CLSID は、このキーの下にあります。
-
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.Application
{000209FF-0000-0000-C000-000000000046}
-
パスを確認して、ファイルの実際の場所と一致することを確認します。
注 短いパス名が正しくないとき、正しいように見える場合があります。 たとえば、Office と Microsoft Internet Explorer の両方 (既定の場所にインストールされている場合) には、C:\PROGRA~1\MICROS~X\ (X は数値) に似た短いパスがあります。 この名前は、最初は短いパス名とは見えない場合があります。パスが正しいかどうかを判断するには、次の手順に従います。
-
[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックします。
-
レジストリから値をコピーし、[ 実行 ] ダイアログ ボックスに値を貼り付けます。メモ アプリケーションを実行する前に 、/automation スイッチを削除します。
-
[OK] をクリックします。
-
アプリケーションが正しく実行されていることを確認します。[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 ファイルの作成時にコードが機能する場合は、名前を変更したファイルを削除します。 これらのファイルは破損しています。 コードが機能しない場合は、これらのファイルに保存されているカスタム設定を保存するために、これらのファイルを元のファイル名に戻す必要があります。
-
管理者アカウントでアプリケーションを実行します。 Office サーバーでは、レジストリとディスク ドライブへの読み取り/書き込みアクセス権が必要です。 現在のセキュリティ設定で読み取り/書き込みアクセスが拒否された場合、Office サーバーが正しく読み込まれていない可能性があります。
システムを調べる
システム構成によって、アウトプロセス COM サーバーの作成に問題が発生する可能性もあります。 トラブルシューティングを行うには、エラーが発生したシステムで次の方法を使用します。
-
アウトプロセス サーバーで問題が発生するかどうかを判断します。 特定の COM サーバー (Word など) を使用するアプリケーションがある場合は、別のアウトプロセス サーバーをテストして、COM レイヤー自体で問題が発生していないことを確認します。 コンピューターにアウトプロセス COM サーバーを作成できない場合は、この記事の「Microsoft Office の再インストール」セクションで説明されているように OLE システム ファイルを再インストールするか、オペレーティング システムを再インストールして問題を解決します。
-
オートメーションを管理する OLE システム ファイルのバージョン番号を調べます。 通常、これらのファイルはセットとしてインストールされます。 これらのファイルはビルド番号と一致する必要があります。 セットアップ ユーティリティが正しく構成されていないと、ファイルが誤って個別にインストールされる可能性があります。 これにより、ファイルが一致しません。 自動化の問題を回避するには、ファイルを調べて、ファイル ビルドが一致していることを確認します。オートメーション ファイルは、Windows\System32 ディレクトリにあります。 次のファイルを調べます。
File name
バージョン
変更日
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 の次の手順に従って、サード パーティ製アドインを無効にします。 この方法で問題が解決する場合は、サード パーティのウイルス対策ベンダーに問い合わせて、ウイルス対策プログラムの更新に関する詳細を確認してください。
-
[ ファイル] メニューの [ オプション] をクリックし、[ アドイン] をクリックします。
-
[ COM アドインの管理] をクリックし、[ 移動] をクリックします。メモ[COM アドイン] ダイアログ ボックスが開きます。
-
サード パーティ製アドインのチェック ボックスをオフにし、[OK] をクリック します。
-
Outlook を再起動します。
-
Office を再インストールする
前の手順で問題が解決しない場合は、Office を削除して再インストールします。
詳細については、次の Office 記事を参照してください。
PC または Mac にOffice 365または Office 2016 をダウンロードしてインストールまたは再インストールする
関連情報
Office オートメーションとコード サンプルの詳細については、次の Microsoft Web サイトを参照してください。