我有一个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
答案 0 :(得分:0)
尝试objxls.quit
Set objxls = Nothing
只会破坏对象引用。 .quit
方法会破坏对象本身。