如何检测丢失的用户窗体
How to detect a missing UserForm
有没有像 Application.IsError(MissingObject) 这样的东西可以 return false 来表示错误的引用?
我有一个使用用户窗体的宏。它只是用两个按钮弹出,用户单击一个按钮,宏就会恢复。这个宏 运行 几十次,文件打开了几个小时。由于某种原因,用户窗体有时会停止存在,并且宏会在打开用户窗体的行上给出错误。我知道用户窗体是问题所在,因为如果我在收到此错误后在编辑器中单击它,应用程序会崩溃。
我使用的是 Excel 2007,所以真正的解决办法可能是升级到这十年制造的东西,但我的解决方法是退出宏并重新打开文件。是否有任何方法允许 Excel 识别用户窗体何时停止存在?
您可以浏览工作簿中的 VBComponents 并查看用户窗体是否存在。
这是一个按名称搜索的函数。
Function IsUserFormThere(strFormName As String) As Boolean
Dim comp As Variant
For Each comp In ThisWorkbook.VBProject.VBComponents
If comp.Name = strFormName Then
IsUserFormThere = True
Exit Sub
End If
Next comp
End Function
可以在按下按钮时调用此函数,如果未找到用户窗体,则可以停止代码执行并通知用户下一步要做什么。
有没有像 Application.IsError(MissingObject) 这样的东西可以 return false 来表示错误的引用?
我有一个使用用户窗体的宏。它只是用两个按钮弹出,用户单击一个按钮,宏就会恢复。这个宏 运行 几十次,文件打开了几个小时。由于某种原因,用户窗体有时会停止存在,并且宏会在打开用户窗体的行上给出错误。我知道用户窗体是问题所在,因为如果我在收到此错误后在编辑器中单击它,应用程序会崩溃。
我使用的是 Excel 2007,所以真正的解决办法可能是升级到这十年制造的东西,但我的解决方法是退出宏并重新打开文件。是否有任何方法允许 Excel 识别用户窗体何时停止存在?
您可以浏览工作簿中的 VBComponents 并查看用户窗体是否存在。
这是一个按名称搜索的函数。
Function IsUserFormThere(strFormName As String) As Boolean
Dim comp As Variant
For Each comp In ThisWorkbook.VBProject.VBComponents
If comp.Name = strFormName Then
IsUserFormThere = True
Exit Sub
End If
Next comp
End Function
可以在按下按钮时调用此函数,如果未找到用户窗体,则可以停止代码执行并通知用户下一步要做什么。