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