Microsoft Office

Microsoft Excel VBA - ワークブックを非表示で開いた際のちらつきを防ぐ

ちらつきを防ぐ

Excel VBA でワークブックを非表示で開き、必要な処理をバックグラウンドで実行後、閉じる処理をすることができます。しかし、その際、非表示で開いても、タスクバーに一瞬だけワークブックが表示され、ちらつきが見えてしまいます。
この問題は Excel.Application オブジェクトを利用するとことで解決できます。
残念ながら、実際の処理速度向上にはつながらないのですが、ちらつきがなくなる分、体感速度が上がったような印象を受けます。

通常版( ちらつきが見えるコード)

Workbooks オブジェクトを利用して、ワークブックを開くと、Open 関数を実行した時点で一瞬だけ表示されます。

Dim sBookName As String
Dim wbReadBook As Object
sBookName = Dir("*.*", vbNormal)
Do While True
  If sBookName = "" Then Exit Do
  Set wbReadBook = Workbooks.Open("D:\Test\" & sBookName)
  ActiveWindow.Visible = False
  wbReadBook.Close (False)
  sBookName = Dir()
Loop
改良版( ちらつきが見えないコード)

Excel.Application オブジェクトを利用して、Workbooks オブジェクトを作成して利用すると、完全にバックグラウンドでオブジェクトが作られるだけなので、一瞬だけでも表示されることはありません。このケースの場合 ActiveWindow オブジェクトの操作は不要です。

Dim sBookName As String
Dim wbReadBook As Object
Dim oxl As Excel.Application
Set oxl = CreateObject("Excel.Application")
Dim obk As Excel.Workbooks
Set obk = oxl.Application.Workbooks
sBookName = Dir("*.*", vbNormal)
Do While True
  If sBookName = "" Then Exit Do
  Set wbReadBook = obk.Open("D:\Test\" & sBookName)
  wbReadBook.Close (False)
  sBookName = Dir()
Loop

-Microsoft Office