【发布时间】:2014-11-24 18:42:29
【问题描述】:
我有一个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.Close FalseinSub ShowSubFolders(fFolder)之后试试这个Set objxls = Nothing现在试试吧 -
已经试过了。没用。
-
'Do stuff here那里到底发生了什么?
标签: excel memory-leaks vbscript excel-2013 vba