特定の場所にあるすべてのブックを開き、それらのブックからデータを引き出して検証し、アクティブなブックにコピーするExcelスプレッドシートにVBAマクロを記述しました。次に、ディレクトリ内の次のブックを開き、ディレクトリ内のすべてのファイルが読み込まれるまでこのプロセスを繰り返します。
一度開いたターゲットワークブックを閉じることができないように見えることを除いて、すべてが機能します。これには、Excelを閉じることも含まれます。ワークブックをシステムメモリから解放するには、タスクマネージャーまたはPowerShellでプロセスを強制終了する必要があります。
Set fs = CreateObject("Scripting.FileSystemObject")
strExcelFileName = Dir(ThisWorkbook.Path & "\Certs\*.xls", vbNormal)
Set xlApp = CreateObject("Excel.Application")
Do While (strExcelFileName <> "")
xlApp.Workbooks.Open (ThisWorkbook.Path & "\Certs\" + strExcelFileName)
'code to run for each workbook opened
***xlApp.Workbooks.Close*** 'when present, Excel freezes
strExcelFileName = Dir 'next file in directory
Loop
xlApp.Workbooks.Close行が存在し、プログラムで呼び出されると、Excelは毎回フリーズします。それがなければ、システムが圧倒されてフリーズする前に、3〜5冊のワークブックを実行できます。次に、これらのプロセスを強制終了し、それらのファイルを移動し、さらに3つ移動して、すべてのファイルがこのように処理されるまで繰り返す必要があります。50を通過するのに約1時間半かかります。
私がやろうとしているのは、次のデータを開く前に、データを閉じてから取得するブックを作成することです。
ActiveWorkbook.Close
これは、読み取り用に開かれたブックではなく、マクロが実行されているブックを閉じようとします。