Microsoft Office

Microsoft Excel VBA ワークブックを完全に非表示にして開く

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 プロセスが起動されます。何度も確認した結果、処理が終了すると、このプロセスも確実に消えるようです。

-Microsoft Office