我对这个有点害羞。由于经过更多测试,VBA 编辑器似乎只重置了活动项目,所有其他项目保持不变!因此,似乎大多数问题都可以通过良好的错误处理来避免。用户仍然可以手动重置您的程序,但如果他们愿意这样做,他们可能是一个精明的用户,并且应该预料到如果他们执行此操作会发生错误。
我有一些用于测试的代码以供参考:
Private ABoolValue As Boolean
Private AClass As Class1 ' Note this is just an empty class I added.
Public Sub Init()
ABoolValue = True
Set AClass = New Class1
End Sub
Public Sub TestValuesOfGlobals()
' Reset VBA.
End
' Check that our variables are not initialised.
Debug.Assert ABoolValue = False
Debug.Assert AClass Is Nothing
' Reinitialise the variables.
Init
' Check they are initialised.
Debug.Assert ABoolValue = True
Debug.Assert Not AClass Is Nothing
End Sub
Public Sub PrintValues()
Debug.Print "The boolean variable is: " & CStr(ABoolValue)
If AClass Is Nothing Then
Debug.Print "The Class is Nothing"
Else
Debug.Print "The Class is NOT Nothing"
End If
End Sub
只需粘贴到 Excel 工作簿的 ThisWorkbook 类中,然后创建一个名为 Class1 的虚拟类模块。运行 Init 方法来实例化变量,然后导航到新的 VBA 项目并尝试重置 VBA 编辑器。您可以使用 PrintValues 方法确定全局变量的值。
我也将此发布到我们的博客: http: //www.gravitycomputing.co.nz/resetting-vba-affects-active-project/