現象
Automation を使用して Microsoft Excel を制御するコードを実行しているときに、次のいずれかのエラーが発生する可能性があります。
Microsoft Excel 97 以降のバージョンの Excel では、次のいずれかのエラー メッセージが表示されます。
エラー メッセージ 1
実行時エラー '1004':
オブジェクト '_Global' のメソッド '>' のメソッド '<名' が失敗しました
エラー メッセージ 2
アプリケーション定義またはオブジェクト定義のエラーです。
Microsoft Excel 95 では、次のいずれかのエラー メッセージが表示されます。
エラー メッセージ 1
実行時エラー '-2147023174'
OLE オートメーション エラー
エラー メッセージ 2
実行時エラー '462':
リモート サーバー コンピューターが存在しないか、使用できません。
原因
Visual Basic では、Excel オブジェクト変数で要素を修飾せずに Excel オブジェクト、メソッド、またはプロパティを呼び出すコード行があるため、Excel への参照が確立されました。 Visual Basic では、プログラムを終了するまでこの参照はリリースされません。 この誤った参照は、コードが複数回実行されるときにオートメーション コードに干渉します。
解決方法
この問題を解決するには、Excel オブジェクト、メソッド、またはプロパティの各呼び出しが適切なオブジェクト変数で修飾されるようにコードを変更します。
状態
この動作は仕様です。
詳細情報
Microsoft Excel を自動化するには、通常、Excel Application オブジェクトまたは Excel Workbook オブジェクトを参照するオブジェクト変数を確立します。 その後、他のオブジェクト変数を設定して、Microsoft Excel オブジェクト モデルの Worksheet、Range、またはその他のオブジェクトを参照できます。 Excel オブジェクト、メソッド、またはプロパティを使用するコードを記述する場合は、常に呼び出しの前に適切なオブジェクト変数を指定する必要があります。 そうでない場合は、Visual Basic によって Excel への独自の参照が確立されます。 この参照により、オートメーション コードを複数回実行しようとすると問題が発生する可能性があります。 コード行がオブジェクト変数で始まる場合でも、オブジェクト変数の前にないコード行の途中にある Excel オブジェクト、メソッド、またはプロパティを呼び出す場合があることに注意してください。
次の手順では、この問題を再現する方法と、問題を修正する方法を示します。
動作を再現する手順
-
Visual Basic で新しい Standard EXE プロジェクトを開始します。 Form1 は既定で作成されます。
-
[プロジェクト] メニューの [参照] をクリックし、自動化する Excel のバージョンのオブジェクト ライブラリをチェックします。
-
Form1 に CommandButton コントロールを配置します。
-
次のコード例を Form1 のコード ウィンドウにコピーします。
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub
-
[ 実行 ] メニューの [ スタート] をクリックするか、F5 キーを押してプログラムを開始します。
-
CommandButton コントロールをクリックします。 エラーは発生しません。 ただし、Excel への参照は作成されており、リリースされていません。
-
CommandButton コントロールをもう一度クリックします。 「現象」セクションで説明されているエラー メッセージのいずれかが表示されます。
メモ エラー メッセージは、コードが で呼び出
しの前に存在せずにセルのメソッドを参照しているために発生します。 xlSheet オブジェクト変数。 -
プロジェクトを停止し、次のコード行を変更します。
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
コード行を次のコード行のように変更します。
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
プログラムをもう一度実行します。 エラー メッセージを受け取らずにコードを複数回実行できることに注意してください。
関連情報
189618 Automation を使用して制御する Visual Basic コードを実行すると、"実行時エラー '-2147023174' (800706ba)" エラー メッセージまたは "ランタイム エラー '462' が表示される場合がありますWord