1.VBからExcel及びWordを操作する時の注意事項 |
1.VBから Excel を操作する時の注意事項 2.Excel のプロセスが正常に終了しない理由 3.ActiveCell にみる Excel のプロセスが正常に終了しない状況の検証 4. 5. 6. |
下記プログラムコードに関する補足・注意事項 動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6) Option :[Option Explicit] 参照設定:追加なし 使用 API:なし その他 : : |
1.VBから Excel を操作する時の注意事項 |
|
2.Excel のプロセスが正常に終了しない理由 |
|
3.ActiveCell にみる Excel のプロセスが正常に終了しない状況の検証 |
まず、2.VBからエクセルを起動・終了する基本操作例 のコードが使用できるようにしておいて下さい。 Command3 と Label1 を Form に貼り付けておいて Command3 のクリックイベントに次のコードを記入して下さい。 Private Sub Command3_Click() xlSheet.Activate Label1.Caption = ActiveCell.Address End Sub 準備ができたら、Excel を起動して、Excel が表示されたら、Command3 をクリックして、Label に、$A$1 と表示されているのを確認して下さい。 確認ができたら、Excel の終了ボタン(Command2)をクリックして、Excel を終了してタスクマネージャーに、EXCEL.EXE の表示があるか確認してみて下さい。 タスクマネージャーのプロセスタブのところで、EXCEL.EXE の表示があるかと思います。 この状況が、プロセスが残っているとか、EXCEL.EXE のプロセスが消えないと言われている状況です。 一見上記のコードは正しいように見えます、現にVBAのヘルプの使用例と同等の使用例でもありますが、VB6.0から使用する場合は正しいとはいえないからです。 Excel の VBA のヘルプを詳しく見ると、下記のように書かれています。 ------------------------------------------------------------------------------------------
構文 式.ActiveCell 式 Application オブジェクトを表す変数。 使用例 次の使用例は、メッセージボックスにアクティブセルの値を表示します。アクティブシートでない場合、ActiveCell プロパティは失敗するので、ActiveCell プロパティを使用する前に、Sheet1 をアクティブにしておきます。
ここで、注意しなけばならないのが、式 Application オブジェクトを表す変数。です。Excel 上で使用する VBA は、そのApplication 上で動作しているので省略が可能で、 ActiveCell.Value と書いても問題がないのですが、VB6.0 から使用する場合は、Application オブジェクトを表す変数を使って使用しないと間違った使い方となります。(エラーとはならないが、上記実験の結果でも分かるようにメモリがうまく解放されません。) それでは、次に、Application オブジェクトを指定して試して見て下さい。 何度か、Excel 上の違うセルをクリックして、その都度次のコードを実行して見て下さい。 Private Sub Command3_Click() xlSheet.Activate Label1.Caption = xlApp.ActiveCell.Address End Sub 何度か、Command3 ボタンをクリックして、動作を確認してから、Excel の終了ボタン(Command2)をクリックして、Excel を終了してタスクマネージャーに、EXCEL.EXE の表示があるか確認してみて下さい。(このプログラム自体は起動したままで) 今度は、EXCEL.EXE の表示がありませんよね。 今回のような場合は、プログラムを終了すれば、タスクマネージャーから、EXCEL.EXE は消えてしまいますので、問題がないと誤解されたり、エラーがでないし、動作(取得できている)はしているので気がつかない人もおられるようですが、何度か同じことを繰り返したり、他の同様な間違った使い方と併用したりすると、プログラム終了後でもタスクマネージャー上に残ったままになったり、メモリリークを起こしたりします。その時点では、どの部分が問題なのか特定する事が難しくなり、挙句の果てに掲示板のお世話になる事になります。 従って、そう言う事ににならないように、[Excelの起動][プログラムのテスト][Excelの終了]と今回のようにプログラムを分けて書いて、コードを追加する度にテストをしてプロセスが残っていない事を確認しながら開発を進めて下さい。 |
4. |
5. |
6. |
検索キーワード及びサンプルコードの別名(機能名) |