Excel を非表示にしてデータを取得
Excel のワークブックから他のワークブックを開いて値を取得したいケースがあります。
この場合、値を取得するだけなので、ターゲットとなるワークブックは非表示のままで行いたいと考えます。非表示にする方法を試すと、実際に非表示にはなるのですが、一瞬だけ表示される現象が発生します。
複数のワークブックを非表示で開いて処理したい場合には、表示が乱れることになります。
通常は次のようなコードを書きます。
通常版
Dim wk As Workbook Set wk = Workbooks.Open("D:\test.xlsx") ActiveWindow.Visible = False '何らかの処理 wk.Close (False)あ
改良版
これを次のように書き直すと、まったく表示されないことに気付きました。
Dim xlApp As New Application Dim wk As Workbook Set wk = xlApp.Workbooks.Open("D:\test.xlsx") wk.ActiveSheet.Visible = False '何らかの処理 wk.Close (False)
ポイントは Excel の Application オブジェクトを新規に作成して、ワークブックを開く際に使用する Workbooks オブジェクトは、この新しい Application オブジェクトを使うことです。こうすると、まったくワークブックが表示されません。
そして、ここが重要なのですが、当然のことながら、別の EXCEL.EXE プロセスが起動されます。何度も確認した結果、処理が終了すると、このプロセスも確実に消えるようです。