为了账号安全,请及时绑定邮箱和手机立即绑定

VBA-正确销毁无模式UserForm实例

VBA-正确销毁无模式UserForm实例

慕婉清6462132 2019-11-19 14:52:49
介绍:我知道-显示UserForms-最佳做法是处理QueryClose用户窗体代码内(If CloseMode = vbFormControlMenu ...)在Unload Me其中不执行任何操作,仅执行胆小的Me.Hide指令(在通过防止[x]参与并最终自我毁灭之后Cancel = True)在[类别]代码中设置相关的变量/ [属性](例如.IsCancelled=True)为了能够由调用代码卸载UF 。有用的链接出色的概述“ UserForm1.Show?” 可以在https://rubberduckvba.wordpress.com/2017/10/25/userform1-show/上找到, 也可以在许多示例性SO答案中找到(Mathieu Guindon又名Mat's Mug和RubberDuck)。1)模态用户窗体的工作示例据我了解-并且我确实尝试学习-,以下代码对于模态 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 okay  If Not ufA.IsCancelled Then      '  do something ...  End If' >> object reference destroyed expressly (as seen in some examples)  unload ufAEnd Sub情况1b) ..没有局部变量,但使用了With New代码块:' ----------------------------------------------------------' >> no need to destruct object reference expressly,'    as it will be destroyed whenever exiting the with block' ----------------------------------------------------------  With New UserForm1      .Show         ' equivalent to: ufA.Show vbModal    ' handle data after user okay      If Not .IsCancelled Then      '  do something ...      End If  End With2)问题使用MODELESS UserForm实例会出现问题。好的,with块方法(参见1b)应该足以对其进行x-it处理后销毁任何对象引用:  With New UserForm1      .Show vbModeless  ' << show modeless uf  End With如果我尝试,但是a)获取有关可能的用户取消的信息以及b)Unload如果在Show指令后使用局部变量(例如“ ufA”)进行了洗礼,则为表格,正是出于表单的原因,所有代码行将立即执行:代码显示表单,下一刻..代码没有发现用户取消,因为没有时间进行任何用户操作,下一刻..[如果用户表单使用本地变量,代码将卸载表单]3)问题我如何处理a)通过MODELESS表单的调用代码正确报告的UserForm取消,以及b)如果使用局部变量,则进行(必要吗?)卸载?
查看完整描述

3 回答

  • 3 回答
  • 0 关注
  • 1014 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信