为什么即使文件关闭后文件仍保留在项目 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
我发现,问题是由于打开和关闭共享工作簿引起的。请参阅答案以获取更多解释。

经过多次检查,发现不是任何代码的问题。这纯粹是因为我正在打开和关闭共享工作簿。使用共享工作簿时,此类问题很常见。因此最好避免使用共享工作簿。

在这些过程中,我为清除内存问题所做的一些事情是

  1. 使用后立即清除变量和对象。

    Eg: Set wb = nothing

  2. 尽可能以只读方式打开工作簿。

    Eg: Set wb = Workbooks.Open(blanketPo, ReadOnly:=True)

  3. 在传递数据时尽可能使用 ByRef 而不是 ByVal。但是请注意使用这两个时的含义
  4. 复制大量数据并完成对此类数据的使用后,使用Application.CutCopyMode = False
  5. 将其从内存中清除
  6. 使用下面的代码清空剪贴板,例如在运行宏时复制并保存在剪贴板中的对象和东西。我从另一个论坛得到这个代码

    Dim DataObj As New MSForms.DataObject 'empty the clipboard DataObj.SetText "" DataObj.PutInClipboard

无论如何,当我选择不使用共享工作簿时,大部分内存和挂起问题都消失了。所以它主要是关于有问题的共享工作簿。