ThisWorkbook.ChangeFileAccess xlReadWrite在VBA窗口中为工作簿创build多个VBAProject

我的工作簿有以下公开事件:

Private Sub Workbook_Open() ThisWorkbook.ChangeFileAccess xlReadOnly End Sub 

然后这个button:

 Sub UnlockDeveloper() Dim pwd As String pwd = InputBox("Enter developer password:", "Password") If pwd = "password" Then If ThisWorkbook.ReadOnly = True Then ThisWorkbook.ChangeFileAccess xlReadWrite End If Else MsgBox ("Incorrect password.") End If End Sub 

这一切都工作正常,但通常,但有时运行UnlockDeveloper子导致VBAProject在VBA窗口中出现两次,我无法知道哪个是真正的文件。 如果我改变了错误,那么一旦closuresExcel,更改就会丢失。

截图

任何人有任何想法如何防止这一点?

即使主机文档已经closures,VBE有时也会在VBE中保留“Ghost Projects”。 在这种情况下, ChangeFileAccess方法正在closures工作簿(并为其留下一个Ghost项目),然后用一个真实的 Project打开工作簿的新实例,但正如您所看到的,很难区分Ghost和真实项目。

所以, 潜在的问题是Ghost项目的持久性。

Ghost项目通常是由插件维护对项目的引用引起的。 主机应用程序(Excel)closures主机文档,并要求VBE删除该项目,但VBE发现仍有一些对该项目的引用,因此不会卸载该项目。

根据我的经验,通常是一个COM插件,不正确地持有对项目的引用。 您可以通过逐个禁用COM加载项来识别罪魁祸首,直到问题不再可复制。 然后重新启用不会导致问题的加载项。 您可能需要检查Excel VBE的加载项。

在我的电脑上,罪魁祸首一直是Power Query Add-in,禁用加载项(并重新启动Excel)始终解决了问题,但YMMV。