Ste*_*son 6 excel vba excel-vba excel-2010 vbe
我的工作簿有以下公开活动:
Private Sub Workbook_Open()
ThisWorkbook.ChangeFileAccess xlReadOnly
End Sub
Run Code Online (Sandbox Code Playgroud)
然后这个按钮:
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
Run Code Online (Sandbox Code Playgroud)
这通常很好,但有时运行UnlockDeveloper子会导致VBAProject在VBA窗口中出现两次,我无法知道哪个是真实文件.如果我在错误的位置进行更改,则只要关闭Excel,更改就会丢失.

有人有任何想法如何防止这种情况?
即使宿主文档已关闭,VBE 有时也会在 VBE 中保留“幽灵项目”。在本例中,该ChangeFileAccess方法是关闭工作簿(并为其保留 Ghost 项目),然后使用真实项目打开工作簿的新实例,但正如您所观察到的,很难区分 Ghost 和真实项目。
所以,根本问题是 Ghost 项目的持久性。
幽灵项目通常是由维护项目引用的加载项引起的。主机应用程序 (Excel) 关闭主机文档,并要求 VBE 删除该项目,但 VBE 发现某些内容仍然引用该项目,因此不会卸载该项目。
根据我的经验,通常是 COM 插件错误地保存了对项目的引用。您可以通过逐一禁用 COM 加载项来识别罪魁祸首,直到问题不再重现。然后重新启用不会导致问题的加载项。您可能需要检查 Excel和VBE的加载项。
在我的电脑上,罪魁祸首始终是 Power Query 加载项,禁用该加载项(并重新启动 Excel)总能解决问题,但是 YMMV。
| 归档时间: |
|
| 查看次数: |
2151 次 |
| 最近记录: |