Пользовательская форма VBA для выполнения выбора только после нажатия кнопки команды
Мне трудно заставить 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
2 ответа
Вот так, используя кнопку "Перейти" _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