为什么即使文件关闭后文件仍保留在项目 window 中?
Why do files remain in project window even after files closed?
场景
我有一个用户窗体,当按下一个按钮时,它会以只读方式打开一个 Excel 文件,获取一些值,然后关闭该文件。以下是我用来打开和关闭文件的代码。
打开:Set planbook = Workbooks.Open(planFilePath, ReadOnly:=True)
关闭:planbook.Close False
问题
关闭文件后,我每次按下按钮时都会在项目 window 中看到该文件。
它正在使用大量内存。因此,Excel 间歇性挂起。
为什么之前打开但当前关闭的文件仍然出现在项目中window?
注意,当按钮被按下三次(即打开和关闭一个工作簿三次),因此图中列出了三个文件。
编辑 1
它不是保留的模块,整个文件在 VBA window 中可见,尽管工作簿已关闭。
编辑 2
注意,如果我让宏打开一段时间,项目 window 中显示的文件一个接一个地消失。
编辑 3
我发现,问题是由于打开和关闭共享工作簿引起的。请参阅答案以获取更多解释。
经过多次检查,发现不是任何代码的问题。这纯粹是因为我正在打开和关闭共享工作簿。使用共享工作簿时,此类问题很常见。因此最好避免使用共享工作簿。
在这些过程中,我为清除内存问题所做的一些事情是
使用后立即清除变量和对象。
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
无论如何,当我选择不使用共享工作簿时,大部分内存和挂起问题都消失了。所以它主要是关于有问题的共享工作簿。
场景
我有一个用户窗体,当按下一个按钮时,它会以只读方式打开一个 Excel 文件,获取一些值,然后关闭该文件。以下是我用来打开和关闭文件的代码。
打开:Set planbook = Workbooks.Open(planFilePath, ReadOnly:=True)
关闭:planbook.Close False
问题
关闭文件后,我每次按下按钮时都会在项目 window 中看到该文件。
它正在使用大量内存。因此,Excel 间歇性挂起。
为什么之前打开但当前关闭的文件仍然出现在项目中window?
注意,当按钮被按下三次(即打开和关闭一个工作簿三次),因此图中列出了三个文件。
编辑 1
它不是保留的模块,整个文件在 VBA window 中可见,尽管工作簿已关闭。
编辑 2
注意,如果我让宏打开一段时间,项目 window 中显示的文件一个接一个地消失。
编辑 3
我发现,问题是由于打开和关闭共享工作簿引起的。请参阅答案以获取更多解释。
经过多次检查,发现不是任何代码的问题。这纯粹是因为我正在打开和关闭共享工作簿。使用共享工作簿时,此类问题很常见。因此最好避免使用共享工作簿。
在这些过程中,我为清除内存问题所做的一些事情是
使用后立即清除变量和对象。
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
无论如何,当我选择不使用共享工作簿时,大部分内存和挂起问题都消失了。所以它主要是关于有问题的共享工作簿。