6

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

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,更改就会丢失。

截屏

有人知道如何防止这种情况吗?

4

1 回答 1

1

VBE 有时会在 VBE 中保留“Ghost Projects”,即使宿主文档已关闭。在这种情况下,该ChangeFileAccess方法是关闭工作簿(并为它留下一个 Ghost 项目),然后用一个真实项目打开工作簿的一个新实例,但是正如您所观察到的,很难区分 Ghost 和真实项目.

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

Ghost 项目通常是由维护对项目的引用的加载项引起的。宿主应用程序 (Excel) 关闭宿主文档,并要求 VBE 删除该项目,但 VBE 看到某些内容仍然具有对该项目的引用,因此不卸载该项目。

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

在我的 PC 上,罪魁祸首一直是 Power Query 加载项,禁用加载项(并重新启动 Excel)始终可以解决问题,但 YMMV.

于 2016-08-29T07:04:34.560 回答