VBA 用户窗体仅在按下命令按钮后才执行选择
VBA userform to execute selections only after hitting command button
我很难让 vba 仅在按下命令按钮(在本例中为 GO 按钮)后才执行我的选择。附件是用户窗体的图片,它不是由 activeX 控件制作的,以及我正在处理的代码。谢谢!
Private Sub MR_Click()
If MR.Value = True Then
Rows(6).Delete
End If
End Sub
Private Sub PMS_Click()
If PMS.Value = True Then
Rows(7).Delete
End If
End Sub
Private Sub VOIDMR_Click()
If VOIDMR.Value = True Then
Rows(13).Delete
End If
End Sub
Private Sub VOIDPMS_Click()
If VOIDPMS.Value = True Then
Rows(14).Delete
End If
End Sub
像这样,使用 "Go" 按钮的 _Click
事件过程(大概 GO_Click()
,但如果需要修改)检查每个复选框并相应地进行删除。
Private Sub GO_Click()
If MR.Value = True Then
Rows(6).Delete
End If
If PMS.Value = True Then
Rows(7).Delete
End If
If VOIDMR.Value = True Then
Rows(13).Delete
End If
If VOIDPMS.Value = True Then
Rows(14).Delete
End If
End Sub
'These event procedures won't do anything, and can be removed:
Private Sub MR_Click()
End Sub
Private Sub PMS_Click()
End Sub
Private Sub VOIDMR_Click()
End Sub
Private Sub VOIDPMS_Click()
End Sub
不再需要复选框的 _Click
事件过程。
要注意事件过程,它们将在事件发生时触发。因此,对于带有 _Click
事件的复选框,只要用户选中(或取消选中),_Click
处理程序就会执行。
如前所述,从集合中删除元素时要小心,因为这通常需要以相反的顺序进行(当您删除第 6 行时,第 7 行变为第 6 行,因此如果同时选中 MR 和 PMS,什么是第 7 行最初不会被删除)。这可能需要一些额外的代码更改,但看起来非常简单,只需在 GO_Click
中重新排序命令即可处理:
Private Sub GO_Click()
If VOIDPMS.Value = True Then
Rows(14).Delete
End If
If VOIDMR.Value = True Then
Rows(13).Delete
End If
If PMS.Value = True Then
Rows(7).Delete
End If
If MR.Value = True Then
Rows(6).Delete
End If
End Sub
@DavidZemens 代码的风格变化:
Private Sub GO_Click()
With Me '<-- reference the userform
Select Case True
Case .MR '<-- if MR checkbox control is True
Rows(6).Delete
Case .PMS '<-- if PMS checkbox control is True
Rows(7).Delete
Case .VOIDMR '<-- if VOIDMR checkbox control is True
Rows(13).Delete
Case .VOIDPMS '<-- if VOIPMS checkbox control is True
Rows(14).Delete
End Select
End With
End Sub
我很难让 vba 仅在按下命令按钮(在本例中为 GO 按钮)后才执行我的选择。附件是用户窗体的图片,它不是由 activeX 控件制作的,以及我正在处理的代码。谢谢!
Private Sub MR_Click()
If MR.Value = True Then
Rows(6).Delete
End If
End Sub
Private Sub PMS_Click()
If PMS.Value = True Then
Rows(7).Delete
End If
End Sub
Private Sub VOIDMR_Click()
If VOIDMR.Value = True Then
Rows(13).Delete
End If
End Sub
Private Sub VOIDPMS_Click()
If VOIDPMS.Value = True Then
Rows(14).Delete
End If
End Sub
像这样,使用 "Go" 按钮的 _Click
事件过程(大概 GO_Click()
,但如果需要修改)检查每个复选框并相应地进行删除。
Private Sub GO_Click()
If MR.Value = True Then
Rows(6).Delete
End If
If PMS.Value = True Then
Rows(7).Delete
End If
If VOIDMR.Value = True Then
Rows(13).Delete
End If
If VOIDPMS.Value = True Then
Rows(14).Delete
End If
End Sub
'These event procedures won't do anything, and can be removed:
Private Sub MR_Click()
End Sub
Private Sub PMS_Click()
End Sub
Private Sub VOIDMR_Click()
End Sub
Private Sub VOIDPMS_Click()
End Sub
不再需要复选框的 _Click
事件过程。
要注意事件过程,它们将在事件发生时触发。因此,对于带有 _Click
事件的复选框,只要用户选中(或取消选中),_Click
处理程序就会执行。
如前所述,从集合中删除元素时要小心,因为这通常需要以相反的顺序进行(当您删除第 6 行时,第 7 行变为第 6 行,因此如果同时选中 MR 和 PMS,什么是第 7 行最初不会被删除)。这可能需要一些额外的代码更改,但看起来非常简单,只需在 GO_Click
中重新排序命令即可处理:
Private Sub GO_Click()
If VOIDPMS.Value = True Then
Rows(14).Delete
End If
If VOIDMR.Value = True Then
Rows(13).Delete
End If
If PMS.Value = True Then
Rows(7).Delete
End If
If MR.Value = True Then
Rows(6).Delete
End If
End Sub
@DavidZemens 代码的风格变化:
Private Sub GO_Click()
With Me '<-- reference the userform
Select Case True
Case .MR '<-- if MR checkbox control is True
Rows(6).Delete
Case .PMS '<-- if PMS checkbox control is True
Rows(7).Delete
Case .VOIDMR '<-- if VOIDMR checkbox control is True
Rows(13).Delete
Case .VOIDPMS '<-- if VOIPMS checkbox control is True
Rows(14).Delete
End Select
End With
End Sub