介绍:
我知道 - 显示UserForms - 这是最好的做法
QueryCloseuserform代码(If CloseMode = vbFormControlMenu ...)Unload Me其中不做,只是一个胆小的Me.Hide指令(在阻止[x] -it和最终的自毁之后Cancel = True).IsCancelled=True) 有用的链接
一个出色的概述"UserForm1.Show?" 可以在https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/ 以及许多示例性的SO答案中找到(thx到@ Mats'Mug和RubberDuck).
1)模态UserForms的工作示例
据我所知 - 我确实尝试学习 - ,对于模态 UF ,以下代码应该没问题:
案例1a) ..使用UF实例的局部变量,如常见:
Public Sub ShowFormA
Dim ufA As UserForm1
Set ufA = New UserForm1
' show userform
ufA.Show ' equivalent to: ufA.Show vbModal
' handle data after user …Run Code Online (Sandbox Code Playgroud) 我有一个包含多个UserForms的excel文件.要打开UserForm我有代码,如
Sub runAdjuster()
Adjuster.Show
End Sub
Run Code Online (Sandbox Code Playgroud)
其中大约有5个.在保留此代码的位置方面,什么是最佳实践?我最初在一个模块中使用它,但已决定将其移动到ThisWorkbook对象.寻找通常用于保持代码清洁的提示.
我想遵循 Mathieu Guindon在这个优秀答案中描述的 MVP Userform 架构。但是,我不明白为什么在 FilterModel 类模块以及 FilterForm Userform 模块中,在类中创建了新类型,然后将其元素重新声明为类的属性。为什么这是必要的?为什么不将 SelectedFilter 声明为字符串类型的属性?我错过了什么吗?
我想使用无格式的用户表单,以便用户可以在回答用户表单上的问题之前浏览 Excel 表。我需要暂停或循环代码,直到用户窗体关闭(隐藏或卸载)。
与此类似的问题: 当表单关闭并设置为 vbModeless 时,如何等待特定代码运行? 但这里的解决方案不适用于我的应用程序;我的用户窗体在一个长子程序的中间打开,该子程序需要在用户窗体关闭后完成执行。
Dim popupActive as Boolean
popupActive = True
StartingSINT_Popup.Show vbModeless 'Open userform
'have VBA code wait until userform is closed
wait until popupActive = False 'set to false with OK button on userform
'continue code with info input inside StartingSINT_Popup userform
Run Code Online (Sandbox Code Playgroud)