Страницы: 1
RSS
Отмена ввода в Application.InputBox. Как правильно отследить и выйти из процедуры при булевом типе данных (Type:=4)
 
Доброго времени суток Планетяне!

Столкнулся вот с какой проблемой: в Application.InputBox можно указать следующие типы данных для ввода (цифровые обозначения) — 0, 1, 2, 4, 8, 16 и 64.
Я использую только 1 (число), 2 (текст), 4 (булево) и 8 (диапазон). Часто у меня перед запуском макроса появляется несколько Application.InputBox подряд и нужно предусмотреть, чтобы пользователь мог на каждом из них (каждый шаг) выйти из процедуры (передумал) по нажатию стандартных кнопок "Отмена" или "Крестик". Со всем, кроме булева более-менее понятно и получается, а вот этот тип при нажатии кнопок выхода, считает, что ему передали False.

Вообще удивляюсь, конечно, порой мелкомягким  :( … Форму с кнопками сделали, а, для отслеживания, "костыли" приходится использовать. Нет, чтобы как MsgBox — vbOk, vbCancel, vbYes. vbNo и vbRetry. Просто и удобно  :)

Знания по работе с диалогами черпаю, в основном, отсюда.
Изменено: Jack Famous - 17.04.2018 15:29:32
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, на мой взгляд логично. Если ожидать в ответ 0/1 и знать что 0 по умолчанию, то обработать не проблема, или нужно искать другой метод, позвляющий получить - "еще не определился"
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
обработать не проблема
а как?)))) вот передумал человек макрос использовать, нажимает Отмена или крестик, а макрос работает)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Вы предложили пользователю вести Истина или Ложь
если результат не Истина, то что выбрал пользователь?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, да не про это я
человек нажал ОТМЕНА (или крестик) - как выйти из процедуры??? Ну передумал он вводить 0 или 1 :D
Сейчас макрос продолжает работать, считая, что пользователь ввёл 0, а пользователь не вводил ничего
Изменено: Jack Famous - 17.04.2018 15:30:30
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
1. не стоило даже стартовать
2. выпадет на след. инпутбоксе, если Вы, как программист предоставите ему такую возможность
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, 1 - ну такой себе подход. 2 — не понял про возможность…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, все от задачи. Я б назвал данный объект сценарным, то есть подразумевающим ввод чего либо и не предусматривающий шаг назад. то есть по умолчанию False и отказаться невозможно, уплачено. Вот и стройте алгоритм исходя из этого. Ну или делайте собственную форму, это тоже не сложно.Или ,что б побесить пользователя, если False, то переспрашивать, вы уверены? :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
переспрашивать, вы уверены?
:D ахаххаха. Тогда уж сразу все булевые запросы "вешать" на MsgBox("Выбрать ИСТИНУ?", vbYesNoCancel + vbQuestion + vbDefaultButton1) — первое, о чём я подумал  :)

Интересно было именно через App.IB отследить — можно же, например, диапазон проверить (If TypeName<>"Range"/If введено is Nothing) или текст (If введено="False")…
Изменено: Jack Famous - 17.04.2018 15:38:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ну может Дмитрий подскажет что. Вон смотрю читает тему, а может уже и пишет :-)
По вопросам из тем форума, личку не читаю.
 
в этом примере не пердусмотрено выхода из окна ввода текста, пока не будет введен ТЕКСТ
но Вы, как программист можете дать возможность выйти, а можете не дать такой возможности
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Попробуйте так:
Код
h = Application.InputBox("Укажите 1 или 0", "", Type:=4)
If h = 3731044 then
msgbox "Нажата кнопка Отмена"
end if
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Jack Famous написал:
все булевые запросы "вешать" на MsgBox
Да, и это избавит пользователя от необходимости вводить что-либо в поле ввода, т.е. от лишнего действия.
И зависимости от локали не будет: в русской локали надо вводить "истина", в английской - "true" (можно конечно вводить 1 или другое число, отличное от 0, но это уже хак в контексте вопроса).
 
Ігор Гончаренко, аварийное завершение работы  :D
Дмитрий Щербаков, пока не выходит… Пробую варианты
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Пробую варианты
ну что там пробовать, False  будет.  

Поддержу
Цитата
Казанский написал:
Да, и это избавит пользователя от необходимости вводить что-либо в поле ввода

Off. Подъехал Илья Муромец к придорожному камню, а на нем написано - "Без вариантов!".
По вопросам из тем форума, личку не читаю.
 
Буржуи пишут, что можно проверить тип данных на выходе и понять 0 это или false
Код
Sub Test()
Dim vRet As Variant
 
vRet = Application.InputBox("Enter Value", Type:=1)
 
If (VarType(vRet) = vbBoolean) And (vRet = False) Then
        MsgBox "False"
ElseIf vRet = 0 Then
        MsgBox "Zero"
Else
        MsgBox vRet
End If
End Sub
Я не волшебник, я только учусь.
 
Казанский, БМВ, так и сделаю, значит  :D

Дмитрий Щербаков, интересное решение (даже не знаю, что это вы использовали), но так ничего и не вышло. Переменные объявлены As Boolean - может поэтому проверка If h = 3731044 then лишена смысла?…

Wiss, так-то оно так, но переменные — Boolean и Type:=4
Для текста я практически так и делаю — If ввели="False" Then Exit Sub
Изменено: Jack Famous - 17.04.2018 16:17:49
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Переменные объявлены As Boolean
Ну естественно. у переменной Boolean всегда только два значения - True или False. Откуда там числу взяться? Надо As Variant использовать.
Уточню: все, что не равно 0 переменная булева типа примет за True, а 0 будет всегда False.
Изменено: Дмитрий Щербаков - 17.04.2018 16:16:50
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий Щербаков написал:
все, что не равно 0 переменная булева типа примет за True, а 0 будет всегда False
спасибо, Дим! Не знал этого  :idea:

Спасибо всем помогающим! Остановлюсь на варианте с MsgBox  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Проще юзерформу сделать. Там такие события отслеживаются.
 
Anchoret, проще использовать готовый MsgBox))) ну, мне точно)) для случаев с ДА/НЕТ буду его юзать
а в формах я пока что нуб  :D  за инфу по событиям — спасибо  ;)
Изменено: Jack Famous - 17.04.2018 16:37:52
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, юзерформы - достаточно гибкий инструмент) Осваиваются быстро.
 
Anchoret, я обязательно до них дойду и буду тут спрашивать на форуме — скоро уже надо будет)) спасибо!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх