问题
Scenario
I have a userform, and when a button is pressed, it opens an Excel file as read-only, gets some values, and closes that file. Following are the codes I am using to open and close the file.
To open: Set planbook = Workbooks.Open(planFilePath, ReadOnly:=True)
To close: planbook.Close False
Problem
After closing the file, I see that file in the project window, for each time I press the button.
It is using a lot of memory. Due to this, Excel hangs intermittently.
Why are files opened earlier but currently closed still appearing in the project window?
Note, when the button is pressed three times (means open and close a workbook three times), and thus there are three files listed in the picture.
Edit 1
It's not the module that remains, the whole file is visible in the VBA window, although the workbook is closed.
Edit 2
Noticed, if I keep the macro open for some time, the files showing in the project window, disappear one by one.
Edit 3
I found, the issue is due to opening and closing a shared workbook. See the answer for more explanation.
回答1:
After many checks, it is found out that issue is not due to any codes. It is purely because of I am opening and closing a shared workbook. This type of issues are common when use shared workbooks. So it is best to avoid usage of shared workbooks.
During these process some items I did to clear memory issue are
Clear out variables and objects immediately after their usage.
Eg: Set wb = nothingOpen workbooks as read only whenever possible.
Eg: Set wb = Workbooks.Open(blanketPo, ReadOnly:=True)- Try to use
ByRefinstead ofByValwhenever possible while passing data. But please take care of the implication also when use these two - After copied large set of data and finished the usage with such data, clear away that from memory by using
Application.CutCopyMode = False Use the following code to empty clip board such as object and stuffs which were copied and keeping in clipboard while running macro. I got this code from another forum
Dim DataObj As New MSForms.DataObject 'empty the clipboard DataObj.SetText "" DataObj.PutInClipboard
Anyway the moment I choose not to use shared workbook, most of the memory and hang up issues disappeared. So its mostly all about the buggy shared workbook.
来源:https://stackoverflow.com/questions/51740482/why-do-files-remain-in-project-window-after-being-closed