我有一个带有组合框的用户表单,用于选择各种employee类的培训类型。

当用户从下拉菜单中选择一个选项时,它将运行下面的宏。
Private Sub TrainingType_Selection_Change()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.Calculation = xlCalculationManual
Dim TrainingType_Selection As String
TrainingType_Selection = Hiring_Validation_Form.TrainingType_Selection.Value
If TrainingType_Selection = "Sustain - 30" Or TrainingType_Selection = "Sustain - 60" Then
Hiring_Validation_Form.LinkingECPID_Selection.Visible = True
Hiring_Validation_Form.LinkingECP_Label.Visible = True
End If
If TrainingType_Selection <> "New Hire" Then
Hiring_Validation_Form.ReqReasonLv1_Selection.Visible = False
Hiring_Validation_Form.Label6.Visible = False
Hiring_Validation_Form.ReqReasonLv2_Selection.Visible = False
Hiring_Validation_Form.Label11.Visible = False
End If
End Sub我遇到的问题是,如果有人从下拉菜单中进行了选择,然后改变主意并从下拉菜单中选择了另一个值,则不会重新运行宏。例如,他们将上面的“新雇员”更改为“持续- 30”。我在用户表单上有一个清晰的按钮,但它清除了整个表单,这在用户只想更改一个输入,而不是完全从头开始的情况下不是理想的。

如何让TrainingType_Selection_Change()宏在组合框选择更改时重新运行
发布于 2020-09-17 00:30:02
这一行:
Application.ScreenUpdating = False
即使在宏完成运行后,也会禁用屏幕更新。
添加
Application.ScreenUpdating = True
作为End Sub之前的最后一行来重新启用它们。
发布于 2020-09-17 00:39:59
通过使用AfterUpdate(),我找到了解决这个问题的方法。我添加了下面的宏,现在当选择发生变化时,它会更新整个表单。
Private Sub TrainingType_Selection_AfterUpdate()
TrainingType_Selection = Hiring_Validation_Form.TrainingType_Selection.Value
Hiring_Validation_Form.LinkingECPID_Selection.Visible = False
Hiring_Validation_Form.LinkingECP_Label.Visible = False
Hiring_Validation_Form.ReqReasonLv1_Selection.Visible = True
Hiring_Validation_Form.Label6.Visible = True
Hiring_Validation_Form.ReqReasonLv2_Selection.Visible = True
Hiring_Validation_Form.Label11.Visible = True
Hiring_Validation_Form.Label21.Visible = True
Hiring_Validation_Form.NewHireSup_Selection.Visible = True
Call TrainingType_Selection_Change
End Subhttps://stackoverflow.com/questions/63923783
复制相似问题