Страницы: 1
RSS
Кнопка отмена на форме (VBA)
 
Прошу помощи. Есть процедура которая вызывает форму и выполняет определенный код. На форме есть кнопка продолжить и отмена.
Код
Sub SSS()
Fоrmа1.Show
;мой код
End Sub

Как завершить выполнение процедуры при нажатии на кнопку "отмена"?
 
Что отменить? Остановить выполнение кода? Просто - кнопка "Выкл"  на системном блоке :)
Вставляйте в код проверки (например, MsgBox)

И без Вашего примера...
 
vikttur
Да остановить выполнение кода.
 
С двумя педалями (газ-тормоз):
 
Для остановки кода достаточно воткнуть Exit Sub.
Если надо полностью выгрузить форму - Unload Me.
Если прервать надо в процессе выполнения кода - либо MsgBox в нужное место кода, либо Doevents (Doevents позволит во время выполнения цикла прервать код нажатием на кнопку на форме).

P.S. файл С.М. не смотрел.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Несколько дополнил С.М., а то ведь из процедуры SSS выхода не будет, если нажата кнопка "Отмена". В отличии от .Net в VBA нет DialogResult для пользовательской формы - только для MsgBox, поэтому нужны "костыли". А ТС, похоже, не совсем чётко изложил, что желал.
Изменено: anvg - 07.10.2013 06:42:22
 
Так более логично будет и универсальнее...
 
Что-то как-то сложно...
Можно ведь использовать простой банальный публичный флаг.
 
"Не стреляйте в программиста ..."
Эксель-драма в одном действии по мотивам posts #4, #6, #8.
:)
 
С.М.
А если в Кнопка отмена на форме(ремейк).xls нажать "крестик" закрытия формы - это будет что - продолжение...?
Изменено: anvg - 08.10.2013 03:53:43
 
Цитата
А если нажать "крестик" закрытия формы
 
А в чём собственно проблема? Кнопка "Продолжить" - простая выгрузка формы, Кнопка отмены - Exit sub.
 
anvg (наверное) имел ввиду, что в при закрытии формы крестиком, логично чтобы происходило
дублирование кнопки "Отмена" - выход из вызывающей форму процедуры - "Ничего не делаю после закрытия формы",
Но по умолчанию WhiteFlag = False и макрос переходит к "Выполняю инструкций после закрытия формы".
Вариант: готовимся к капитуляции  :)  ещё при загрузке формы:
Код
Option Explicit
Dim WF As Boolean
Property Get WhiteFlag() As Boolean
    WhiteFlag = WF
End Property
Private Sub CommandButton1_Click()
    WF = False
    Me.Hide
End Sub
Private Sub CommandButton2_Click()
    Me.Hide
End Sub
Private Sub UserForm_Initialize()
    WF = True
End Sub
 
Можно просто блокировать клик по крестику.
 
Юрий, я же написал: "Вариант".
Можно и блокировку, как в файле 'Кнопка отмена на форме(...).xls',
предварительно выбросив "телевизор" (Label1)  :)
Изменено: С.М. - 08.10.2013 16:43:02
Страницы: 1
Наверх