gpt4 book ai didi

Excel 不会在工作簿关闭时释放内存

转载 作者:行者123 更新时间:2023-12-04 21:04:33 24 4
gpt4 key购买 nike

我有一个VBScript,它可以一个一个打开一个文件夹中的所有excel文件,并将一定范围复制到一个摘要文件中。摘要文件在整个操作过程中保持打开状态,但其他文件在复制范围后关闭。这意味着 Excel 应用程序始终保持打开状态。

问题是即使在关闭并且内存使用量稳步攀升之后,Windows 仍会保留每个工作簿。我试图通过禁用所有加载项并删除personal.xlsb 工作表来隔离问题。然后我手动打开了几个工作簿(不涉及脚本)并一一关闭。每个打开文件的内存使用都会增加,但当我开始关闭它们时并没有减少。

我已经搜索了几个小时,我能找到的唯一答案是退出并重新启动应用程序。这是一个可悲的解决方法(对我的脚本来说也是一种痛苦)——必须有一种更好的方法来释放关闭的工作簿内存。

我正在运行 Excel 2013。

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")

'Get summary folder location
Set StartFolder = objShell.BrowseForFolder(0, "Select the folder to summarize", 0, 5)
If StartFolder Is Nothing Then
Wscript.Quit
End If
StartFolderName = StartFolder.self.path
Set SuperFolder = objFSO.GetFolder(StartFolderName)

'Open Excel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False

Set objWorkbook = objExcel.Workbooks.Add()
NewExcelName = StartFolderName & "\Summary.xlsx"
objWorkbook.SaveAs(NewExcelName)

Call ShowSubfolders (SuperFolder)

'------------------------------------------------------------------------------
'Save and quit
objWorkbook.Save
objExcel.Quit
Wscript.echo "Done"

'------------------------------------------------------------------------------

Sub ShowSubFolders(fFolder)
Set objFolder = objFSO.GetFolder(fFolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles

'Open document
Set objxls = objExcel.Workbooks.Open(objFile.path)

'Do stuff here

'Close Document
objxls.Close False

Next

For Each Subfolder in fFolder.SubFolders
ShowSubFolders(Subfolder)
Next
End Sub

最佳答案

试试 objxls.quitSet objxls = Nothing只是破坏对象引用。 .quit方法会破坏对象本身。

关于Excel 不会在工作簿关闭时释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27111901/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com