VBA中如何让UserForm循环校验直到完成选择或点击退出?
问题原因
你编写的Do While True属于无限死循环,VBA是单线程执行机制,循环会持续占用执行资源,导致窗体的用户交互事件无法被响应,因此用户没办法回到窗体修改选择,只能持续收到弹出的消息框。
修复方案
不需要额外写循环逻辑,只需在用户每次点击确认按钮时做单次校验即可:
- 校验不通过时弹出提示,直接终止当前点击事件的执行,控制权会自动交还给窗体,用户可以修改选择后再次点击确认
- 校验通过后再执行后续的保存、关闭窗体逻辑
- 退出按钮单独编写关闭窗体的逻辑即可
修改后的确认按钮代码
Private Sub CommandButton_weiter_Click() '校验是否完成选择 If ComboBox_Kunde.Value = "" Or ComboBox_Lager.Value = "" Then MsgBox "Your selection is incomplete." & vbCrLf & vbCrLf _ & "Please make a selection or exit the form.", vbCritical '校验不通过直接退出当前事件,返回窗体交互界面 Exit Sub End If '校验通过后执行后续业务逻辑 Dim WB As Workbook: Set WB = ActiveWorkbook Dim WS As Worksheet: Set WS = WB.Sheets("directory") Dim lager As Range: Set lager = WS.Range("lager") lager.Value = ComboBox_Lager.Value UserForm_Selection.Hide Unload UserForm_Selection End Sub
退出按钮参考代码(假设按钮名称为CommandButton_Exit)
Private Sub CommandButton_Exit_Click() '点击退出直接关闭窗体 Unload UserForm_Selection End Sub
内容的提问来源于stack exchange,提问作者user3601876
相关产品推荐
相关产品推荐

