我的工作簿有以下公开活动:
Private Sub Workbook_Open()
ThisWorkbook.ChangeFileAccess xlReadOnly
End Sub
然后是这个按钮:
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窗口中出现两次,我无法知道哪个是真实文件。如果我在错误的位置进行更改,则只要关闭Excel,更改就会丢失。
任何人都有任何想法如何防止这种情况?
答案 0 :(得分:1)
VBE有时会在VBE中保留“Ghost Projects”,即使主文档已关闭。在这种情况下,ChangeFileAccess
方法正在关闭工作簿(并为其保留Ghost项目),然后使用真实项目打开工作簿的新实例,但是当您观察,很难区分Ghost和真实项目。
因此,底层问题是Ghost项目的持久性。
Ghost projects通常由加载项维护对项目的引用引起。主机应用程序(Excel)关闭主机文档,并要求VBE删除项目,但VBE发现某些内容仍然引用了项目,因此不会卸载项目。
根据我的经验,它通常是一个COM插件,它错误地持有对项目的引用。您可以通过逐个禁用COM加载项来识别罪魁祸首,直到问题不再可重现为止。然后重新启用不会导致问题的加载项。您可能需要检查VBE的Excel 和的加载项。
在我的电脑上,罪魁祸首一直是Power Query Add-in,禁用加载项(并重启Excel)一直解决了问题,但YMMV。