Страницы: 1
RSS
Обойти выполнение макроса при ToggleButton.Value = True
 
Здравствуйте. Имеются две кнопки CommandButton и ToggleButton. Необходимо, чтобы при вызове события CommandButton_Click значение ToggleButton принимало True, но при этом не срабатывал макрос в событии ToggleButton_Click. Можно ли это как-то реализовать?

Добавлено: событие ToggleButton_Click должно работать, при нажатии на сам выключатель, когда его значение false.
Код
Option Explicit

Private Sub CommandButton1_Click()
ToggleButton1.Value = True
End Sub

Private Sub ToggleButton1_Click()

If ToggleButton1.Value = True Then
        With ToggleButton1
            .BackColor = vbYellow
            .Caption = "Выйти"
        End With
    Else
        With ToggleButton1
            .Caption = "Войти"
            .BackColor = -2147483633
        End With
End If

MsgBox "ToggleButton.Value должно быть True, но макрос не должнен работать и это сообщение не должно появляться!"
End Sub 
Изменено: НСС - 12.08.2020 20:36:22
 
Код
Dim bFlag As Boolean

Private Sub CommandButton1_Click()
    bFlag = True
    ToggleButton1.Value = True
    bFlag = False
End Sub

Private Sub ToggleButton1_Click()
    If bFlag = False Then
........................
 
vikttur, к сожалению ваш макрос не все условия учитывает. Событие самого ToggleButton не работает. bFlag в значении False. И при нажатии на "выключатель" да, работает какой-то макрос привязанный к выключателю, но при его отключении (отжатии) другой макрос или другое условие не работает.
 
А это кто писал?
Цитата
но при этом не срабатывал макрос в событии ToggleButton_Click
Пишите строку не в начале:
Код
If bFlag = False Then
      ' здесь блок строк, которые не должны срабатывать
End If
 
vikttur, посмотрите гифку, так думаю будет понятнее. Как вернуть false и true выключателю?  
Изменено: НСС - 12.08.2020 22:13:46
 
Цитата
НСС написал: чтобы при вызове события CommandButton_Click значение ToggleButton принимало True, но при этом не срабатывал макрос в событии ToggleButton_Click.
Это есть. Выключатель в True. Надпись Войти/Выйти не менялась, но Вы сами так пожелали.
Если до этого было  Value=True, то кнопка сработает на переключение при нажатии, если было Value=False, то теперь кнопку нужно нажать два раза.
 
vikttur, это не совсем то, что требуется. Нужно:

1. нажатие кнопки вызывает → нажатие выключателя → изменение Caption выключателя на "выйти" - решено!
2. нажатие выключателя вызывает → изменение его Caption на "выйти" - не решено.
3. отжатие выключателя вызывает → изменение его Catpion на "войти" - не решено.

Кнопку не нужно нажимать два раза.  
 
п.2 и 3 - как работал выключатель, так и работает.
п.1 - нажали кнопку - перевели выключатель в True, но НЕ МЕНЯЛИ надпись на кнопке!!! Вы же сами писали, что макрос не должен сработать! Т.е. пр нажатии на кнопку хоть 100 раз ни надпись, ни цвет меняться не должны.
 
vikttur, надпись меняется в п.1. Посмотрите гифку. Выключатель не работает.  
 
Надо не мультики показывать, а пример с измененным кодом. То, что я Вам показал - там надпись НЕ МЕНЯЕТСЯ! Как она может меняться, если Вы сами писали - макрос не должен выполняться?!

Опишите в первом сообщении НОРМАЛЬНО задачу. Для чего это и как должно быть, все остальное удалю.  Иначе бред сивой кобылы получается, а не объяснение.
По логике - да, при изменении значения и надпись надо менять. Но Вы же писали - не менять. Не прямо так писали, но - макрос не должен выполняться. А как изменится надпись? Ветром?
 
vikttur, похоже, что мы оба запутались. Я в ваше условие
Код
If bFlag = False Then
      ' здесь блок строк, которые не должны срабатывать
End If
Вставил Else. Но это не суть важно, т.к. после работы события кнопки выключатель перестает работать. А нужно, чтобы он работал. Кнопка его нажимает, но и отключает возможность работать с выключателем в отдельности. Полагаю, что эту задачу нельзя решить, т.к. условия друг другу противоречат.
Изменено: НСС - 12.08.2020 23:05:30
 
Цитата
Я в Вщше условие вставил Else
Как Вы там чего навставляли - одному Вам известно.

Цитата
условия друг другу противоречат.
Это Ваше описание противоречит логике.

Как я понимаю, работать должно так.
При нажатии кнопки выполняется макрос ToggleButton1, как будто ToggleButton1.Value = False, независимо от того, в каком положении находится ToggleButton1 Т.е. : .Value принимает значение True, надпись и цвет должны соотетствовать True

Правильно описана задача? Тогда так:
Код
Private Sub CommandButton1_Click()
    ToggleButton1.Value = False
End Sub
 
Private Sub ToggleButton1_Click()
    With ToggleButton1
        If .Value = True Then
            .BackColor = vbYellow
            .Caption = "Âûéòè"
        Else
            .BackColor = -2147483633
            .Caption = "Âîéòè"
        End If
    End With
End Sub
 
vikttur, есть кнопка "регистрация" для регистрации нового пользователя и выключатель для входа уже зарегистрированных пользователей. И кнопка "регистрация" и выключатель вызывают одну и туже форму, в которой пользователь вводит свои данные. Если это новый пользователь, то он нажимает на кнопку "регистрация", вводит свои данные и, соответственно, идет проверка  отсутствие его данных и, далее, регистрация. Форма регистрации закрывается и выключатель принимает нажатое положение с Caption "Выйти". При этом не должен сработать макрос вызова формы авторизации, которая привязана к выключателю. Должно измениться только название и его BackColor.

И вот этот новый, только что зарегистрированный пользователь, сделал некоторые действия и решает выйти, отжав выключатель. И вот тут, надпись этого выключателя должна измениться на "Войти" (для других зарегистрированных пользователей), он должен отжаться, приняв Value = False, и (или) сработать какой-то еще макрос привязанный к его Value = False.  
Изменено: НСС - 12.08.2020 23:26:31
 
И вот так нельзя было описать в первом сообщении? Нельзя было подготовить нормальный пример? Блин, ну, мастер объяснений...
Поледний код проверили? Если что-то опять не так, создайте тему с нормальным описанием и примером.
 
Цитата
НСС написал:
Обойти выполнение макроса при ToggleButton.Value = True
в самом начале макроса:
Код
if ToggleButton.Value = True then exit sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
vikttur, создать новую тему или создать пример с формами и сюда его загрузить?  
 
Если код в сообщении №12 или подсказка в сообщении №15 не помогают, создавайте тему.
Но, ради всекх форумных святых! Создайте нормальный пример и описание. Не бросайтесь в другую крайность, не нужна форма со всей ее начинкой. только то, что поможет в объяснении задачи
 
Хорошо. Спасибо за помощь и за терпение.    
Страницы: 1
Наверх