【解決方法】ワークブックを開いたり閉じたりするとメモリが盗まれる


多数の Excel ファイルからデータを抽出しています。
ファイルを開いたり閉じたりするたびに、ファイルからデータを保存しなくても、メモリはどんどん小さくなります。
ファイルを閉じても、多くの VBAproject がメモリに残っていることに気付きました。 ファイルを完全に閉じて、VBAproject のメモリを解放するにはどうすればよいですか?

Sub Main()
    Dim info, analyse As Variant
    Dim i, n As Integer
    Beep
    Dim colFiles As Collection, f, wb As Workbook
    
    Application.ScreenUpdating = False
    
    Set colFiles = GetMatches("c:\Users\Documents\Analyseenhed\LIMS_2022\", "*Resultat*.xlsx")
    n = colFiles.Count
    i = 0
    For Each f In colFiles
        Set wb = Workbooks.Open(f.path, UpdateLinks:=False, ReadOnly:=True)
        wb.Close
        WB=nothing
        Debug.Print i & " of " & n & "   " & GetMemory
        i = i + 1
    Next f
    
    
End Sub

Function GetMemory()
    Dim oInstance As Object, colInstances As Object
    Dim totalMem As Single, availMem As Single
 
    Set colInstances = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_PhysicalMemory")
    For Each oInstance In colInstances
        totalMem = totalMem + oInstance.Capacity / 1024 / 1024
    Next


    Set colInstances = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_OperatingSystem")
    For Each oInstance In colInstances
        availMem = availMem + oInstance.FreePhysicalMemory / 1024
    Next
    
    
    GetMemory = Round(availMem / totalMem * 100, 1)
    Set colInstances = Nothing
    Set oInstance = Nothing
End Function

私が試したこと:

ファイルを閉じて wb オブジェクトを何も設定しませんでした

解決策 1

開いたファイルの VBA プロジェクトがまだ表示されている場合は、実際には閉じていません。

VB
wb.Close
WB=nothing

奇妙に見えます。 WB 自動的に調整する必要がありました wb その2行目は「オブジェクトが必要です」というエラーをスローする必要がありました。 代わりに試す

VB
wb.Close
Set wb=nothing

もう 1 つの方法として、ワークブックを開いたり閉じたりする代わりに、Power Query を使用してデータを抽出 (および結合) してみませんか?

解決策 2

解決策がない問題のようです:

リダイレクト[^]

コメント

タイトルとURLをコピーしました