场景
我有一个用户窗体,当按下按钮时,它将以只读方式打开一个excel文件,并从该文件中获取一些值并关闭。以下是我用来打开和关闭文件的代码
要打开:Set planbook = Workbooks.Open(planFilePath, ReadOnly:=True)
要关闭:planbook.Close False
问题
我面临的问题是,即使关闭文件后,每当我按下按钮时,我仍会在宏文件的项目窗口(请参见图片)中看到该文件。因此,它占用了大量内存。因此,excel断断续续地挂起,整个事情变得一团糟。
我想知道为什么有些文件我以前打开过,但是当前关闭的文件仍然出现在项目窗口中。有人遇到过类似的问题吗?请看图片。请注意,我按了3次按钮(表示3次打开和关闭工作簿),因此图片中列出了三个文件
编辑1
我刚刚意识到,实际上并不是剩下的模块了。实际上,尽管该工作簿已关闭,但整个文件似乎在VBA窗口中可见。
编辑2
注意到,如果我将宏打开一段时间,则在项目窗口中显示的文件将一一消失。
编辑3
经过多次检查,发现问题不是由于我的代码或其他原因引起的。完全是因为我要打开和关闭共享工作簿。请查看答案以获取更多说明
答案 0 :(得分:0)
经过多次检查,发现该问题不是由于任何代码引起的。完全是因为我要打开和关闭共享工作簿。使用共享工作簿时,这种类型的问题很常见。因此,最好避免使用共享工作簿。
在这些过程中,我为清除内存问题所做的一些操作是
使用完后立即清除变量和对象。
Eg: Set wb = nothing
尽可能打开只读的工作簿。
Eg: Set wb = Workbooks.Open(blanketPo, ReadOnly:=True)
ByRef
代替ByVal
。但同时使用这两者时,也请注意其含义。Application.CutCopyMode = False
使用以下代码清空剪贴板,例如在运行宏时复制并保存在剪贴板中的对象和东西。我从另一个论坛获得了这段代码
Dim DataObj As New MSForms.DataObject 'empty the clipboard
DataObj.SetText ""
DataObj.PutInClipboard
无论如何,当我选择不使用共享工作簿时,大部分内存和挂断问题就消失了。因此,这主要是关于越野车共享工作簿的。