Страницы: 1
RSS
Форма Inputbox - как определить какую кнопку нажал пользователь
 
Всем привет.  
Такая проблема - есть форма Inputbox с кнопками Оk и Cancel.  
Пользователь вводит значение в текстовое поле.  
Далее мне надо знать какую кнопку он нажимает - если Ок, то пойдет поиск значения и заполнение ФИО пользователя и даты ввода. Если Cancel - не пойдет соответственно.  
Пробовал через VbOK и VbCancel - не работает.  
Сделал свой UserForm, попробовал - там работает через событие нажатия кнопки Ok или Cancel, но тогда не получается сразу поставить курсор на текстовое поле. Пользователь будет искать подряд много значений, а каждый раз тыкать мышкой в текстовое поле (или табом двигать) - не совсем удобно.  
Вот пример через UserForm  
 
Private Sub ОК_Click()  
i = TextBox1.Value  
TextBox1.Value = Empty  
ChoiseResult2 = 0  
ChoiseNum.Hide  
End Sub  
 
Если добавить фокус на текстовое поле - все равно ничего не получается (скорее всего из-за запуска формы событием Ок_клик)  
Как сделать - не принципиально: или через userform, или inputbox.  
Хелп, плиз...  
 
з.ы. форум читал, неделю искал и пытался - не получается. Первый раз что-то сел писать на VBA, сам разбирался, честно :)
 
{quote}{login=Desert-Eagle55}{date=09.11.2012 01:00}{thema=Форма Inputbox - как определить какую кнопку нажал пользователь}{post}з.ы. форум читал, неделю искал и пытался - не получается{/post}{/quote}  
в справку по inputbox по пути не заглядывали?  
 
If the user clicks OK or presses ENTER , the InputBox function returns whatever is in the text box. If the user clicks Cancel, the function returns a zero-length string ("").
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Давайте пример в файле - сделайте небольшой, без лишних данных.  
А то непонятно, что там у Вас уже сделано.
 
на cancel получите  значение false, его и анализируйте
 
{quote}{login=Desert-Eagle55}{date=09.11.2012 01:00}{thema=Форма Inputbox - как определить какую кнопку нажал пользователь}{post}  
 
Private Sub ОК_Click()  
i = TextBox1.Value  
TextBox1.Value = Empty  
ChoiseResult2 = 0  
ChoiseNum.Hide  
End Sub  
{/post}{/quote}  
 
А, поясню же :)  
Сначала получаю значение в переменную, потом чищу текстовое поле, чтобы следующее значение можно было вводить.  
Дальше ChoiseResult2 получает 0 - по этому значению узнаю, что нажата кнопка ОК (для Cancel = 1), прячу форму. Далее идет повторный запуск для поиска следуюшего значения.
 
{quote}{login=ikki}{date=09.11.2012 01:05}{thema=Re: Форма Inputbox - как определить какую кнопку нажал пользователь}{post}{quote}{login=Desert-Eagle55}{date=09.11.2012 01:00}{thema=Форма Inputbox - как определить какую кнопку нажал пользователь}{post}з.ы. форум читал, неделю искал и пытался - не получается{/post}{/quote}  
в справку по inputbox по пути не заглядывали?  
 
If the user clicks OK or presses ENTER , the InputBox function returns whatever is in the text box. If the user clicks Cancel, the function returns a zero-length string ("").{/post}{/quote}  
 
В справку смотрел. Тут уперся в то, что если пользователь не введет значение и нажмет Ок, то будет найдена первая пустая ячейка и от нее заполнены другие данные. А мне надо заполнить только по тем, где непустые ячейки.
 
Обрабатывайте пустую строку, как ошибку - можно вывести сообщение, можно принудительный выход из процедуры...
 
Юрий, так в том-то и засада - нельзя определить, то ли "Отмену" нажали, то ли "ОК", но поле было пустым.  
 
впрочем,.. я разницы для обработки не вижу.  
как только получили из инпутбокса пустую строку - конец работе, и все дела :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
И я об этом :-)
 
{quote}{login=Юрий М}{date=09.11.2012 01:14}{thema=}{post}Обрабатывайте пустую строку, как ошибку - можно вывести сообщение, можно принудительный выход из процедуры...{/post}{/quote}  
 
ага...  
ну да, так получилось  
я что-то в значения этих кнопок Ок и Cancel уперся  
все оказалось проще  
 
Спасибо за помощь! Сэкономили мне неделю размышлений :)
 
Нашёл:    
Sub qqq()  
Dim strInput As String  
strInput = InputBox("")  
   If StrPtr(strInput) = 0 Then  
       MsgBox "Вы нажали Cancel!"  
   End If  
End Sub
 
а где нашёл?  
не в справке же?  
 
я помню, читал где-то мельком, что есть "нестандартный" способ различить, но какой - не стал запоминать. ибо не пользую я инпутбокс. религия такая. :)
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Оказывается, есть такая недокументированная функция :-)  http://vba-help.ru/vbahelp/all/InputBox/
 
ясно, спасибо. еще по этой же и аналогичным функциям:  http://vb.mvps.org/tips/varptr.asp
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
пасиба за толковые ссылки, буду пользоваться :)
Страницы: 1
Читают тему
Наверх