Столкнулся вот с какой проблемой: в Application.InputBox можно указать следующие типы данных для ввода (цифровые обозначения) — 0, 1, 2, 4, 8, 16 и 64. Я использую только 1 (число), 2 (текст), 4 (булево) и 8 (диапазон). Часто у меня перед запуском макроса появляется несколько Application.InputBox подряд и нужно предусмотреть, чтобы пользователь мог на каждом из них (каждый шаг) выйти из процедуры (передумал) по нажатию стандартных кнопок "Отмена" или "Крестик". Со всем, кроме булева более-менее понятно и получается, а вот этот тип при нажатии кнопок выхода, считает, что ему передали False.
Вообще удивляюсь, конечно, порой мелкомягким … Форму с кнопками сделали, а, для отслеживания, "костыли" приходится использовать. Нет, чтобы как MsgBox — vbOk, vbCancel, vbYes. vbNo и vbRetry. Просто и удобно
Знания по работе с диалогами черпаю, в основном, отсюда.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous, на мой взгляд логично. Если ожидать в ответ 0/1 и знать что 0 по умолчанию, то обработать не проблема, или нужно искать другой метод, позвляющий получить - "еще не определился"
а как?)))) вот передумал человек макрос использовать, нажимает Отмена или крестик, а макрос работает)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Ігор Гончаренко, да не про это я человек нажал ОТМЕНА (или крестик) - как выйти из процедуры??? Ну передумал он вводить 0 или 1 Сейчас макрос продолжает работать, считая, что пользователь ввёл 0, а пользователь не вводил ничего
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Ігор Гончаренко, 1 - ну такой себе подход. 2 — не понял про возможность…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous, все от задачи. Я б назвал данный объект сценарным, то есть подразумевающим ввод чего либо и не предусматривающий шаг назад. то есть по умолчанию False и отказаться невозможно, уплачено. Вот и стройте алгоритм исходя из этого. Ну или делайте собственную форму, это тоже не сложно.Или ,что б побесить пользователя, если False, то переспрашивать, вы уверены? :-)
ахаххаха. Тогда уж сразу все булевые запросы "вешать" на MsgBox("Выбрать ИСТИНУ?", vbYesNoCancel + vbQuestion + vbDefaultButton1) — первое, о чём я подумал
Интересно было именно через App.IB отследить — можно же, например, диапазон проверить (If TypeName<>"Range"/If введено is Nothing) или текст (If введено="False")…
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
в этом примере не пердусмотрено выхода из окна ввода текста, пока не будет введен ТЕКСТ но Вы, как программист можете дать возможность выйти, а можете не дать такой возможности
Jack Famous написал: все булевые запросы "вешать" на MsgBox
Да, и это избавит пользователя от необходимости вводить что-либо в поле ввода, т.е. от лишнего действия. И зависимости от локали не будет: в русской локали надо вводить "истина", в английской - "true" (можно конечно вводить 1 или другое число, отличное от 0, но это уже хак в контексте вопроса).
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Буржуи пишут, что можно проверить тип данных на выходе и понять 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
Дмитрий Щербаков, интересное решение (даже не знаю, что это вы использовали), но так ничего и не вышло. Переменные объявлены As Boolean - может поэтому проверка If h = 3731044 then лишена смысла?…
Wiss, так-то оно так, но переменные — Boolean и Type:=4 Для текста я практически так и делаю — If ввели="False" Then Exit Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Jack Famous написал: Переменные объявлены As Boolean
Ну естественно. у переменной Boolean всегда только два значения - True или False. Откуда там числу взяться? Надо As Variant использовать. Уточню: все, что не равно 0 переменная булева типа примет за True, а 0 будет всегда False.
Дмитрий Щербаков написал: все, что не равно 0 переменная булева типа примет за True, а 0 будет всегда False
спасибо, Дим! Не знал этого
Спасибо всем помогающим! Остановлюсь на варианте с MsgBox
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Anchoret, проще использовать готовый MsgBox))) ну, мне точно)) для случаев с ДА/НЕТ буду его юзать а в формах я пока что нуб за инфу по событиям — спасибо
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Anchoret, я обязательно до них дойду и буду тут спрашивать на форуме — скоро уже надо будет)) спасибо!
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄