Mint が提供する VM 追跡コードを基にして、VM が問題を引き起こし始めるポイントに近づいたときに警告し、再起動を推奨するアプリケーション用の一種の「早期警告」システムを作成しました。少し面倒ですが、誰かが 64 ビット OS 環境で 32 ビット Office を実行するためのより良い解決策を思い付くまで、それを実行する必要があります。
ReturnVM:仮想メモリの使用量を GB 単位で返し、1.425GB を超えるとアラートをトリガーします。これは、再起動する前に作業を完了する余裕を与えながら、再起動の間にできるだけ多くの時間を与えるアプリケーションで機能することがわかりました。必要に応じて自由に調整してください。
os_Restart:アクティブな Access プロセスを強制終了し、残った laccdb ファイルを削除し、アプリケーションを再起動するバッチ ファイルを書き込みます (すべてがユーザーのデスクトップにある場合)。ファイルを書き込んだ後、バッチを実行します。別の関数は、アプリケーションの開始時にこのファイルを削除します。
TempVars!tv_WinUID = Environ("ユーザー名")
Function ReturnVM() As Double
Dim Mem As MEMORYSTATUS
Dim Result As Integer
Mem.dwLength = Len(Mem)
GlobalMemoryStatus Mem
ReturnVM = Format((Mem.dwTotalVirtual - Mem.dwAvailVirtual) / 1073741824, "0.000")
Debug.Print ReturnVM & " GB of VM used."
If (ReturnVM >= 1.425) Then
DoEvents
Result = MsgBox("Office Virtual Memory usage is approaching the pre-set limit." & vbCrLf & vbCrLf & "To prevent a possible crash, please click 'OK' to restart immediately." & vbCrLf & vbCrLf & "You may click 'Cancel' to finish what you're working on, but if you do, please restart the application as soon as possible.", vbOKCancel)
If (Result = vbOK) Then
os_Restart
End If
End If
End Function
Public Function os_Restart()
Dim fso As Object
Dim oFile As Object
Dim BatchContents As String
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.CreateTextFile("C:\Users\" & TempVars!tv_WinUID & "\Desktop\RestartAccess.bat")
BatchContents = "@echo Restarting Application..." & vbCrLf & _
"@echo off" & vbCrLf & _
"taskkill /f /im MSACCESS.EXE" & vbCrLf & _
"ping -n 6 127.0.0.1 > nul" & vbCrLf & _
"del " & Chr(34) & "C:\Users\" & TempVars!tv_WinUID & "\Desktop\Application.laccdb" & Chr(34) & vbCrLf & _
"start " & Chr(34) & Chr(34) & " " & Chr(34) & "C:\Users\" & TempVars!tv_WinUID & "\Desktop\Application.accdb" & Chr(34)
DoEvents
'Debug.Print BatchContents
oFile.WriteLine BatchContents
oFile.Close
Set fso = Nothing
Set oFile = Nothing
Call Shell("C:\users\" & TempVars!tv_WinUID & "\Desktop\RestartAccess.bat")
End Function