Как вывести диалоговое окно для ввода числа — Visual Basic(Бейсик)

Как вывести диалоговое окно для ввода числа?
Вариант. Для того, чтобы отобразить диалоговое окно, позволяющее ввести необходимое число, можно воспользоваться вышеупомянутой функцией InputBox и функцией Val

iData = Val(InputBox(Prompt:="Введите число", Title:=""))
Используя подобную конструкцию имейте ввиду, что после отказа от ввода, т.е. нажатии кнопки Отмена или Закрыть [X], Вы получите 0, кроме того, в качестве разделителя целой и дробной части числа, необходимо использовать только точку .

Если же возникнет необходимость в отказе от ввода, или при ввода числа необходимо будет использовать более привычный разделитель, а именно запятую , то в таком случае :

iData = InputBox("Введите число", "")
 
If iData <> "" Then
   iData = Val(Application.Substitute(iData, ",", "."))
   'iData = Val(Replace(iData, ",", ".")) 'XL2000
   MsgBox "Вы ввели число : " & iData, , ""
Else
   MsgBox "Вы отказались от ввода [не]нужного числа", , ""
End If
Вариант. Можно также использовать метод InputBox объекта Application
code: #vba
Dim iResult As Double
iResult = Application.InputBox(Prompt:="Введите число", Title:="", Type:=1)
Используя этот метод Вы сможете не только ввести необходимое число, но и указать (т.е. ввести вручную или выбрать с помощью мышки) в качестве источника данных ячейку или диапазон ячеек (правда в этом случае в вычислении будут участвовать данные только первой ячейки). Кроме того, Вы можете вводить и более сложные формулы (возвращающие число или текст, который может быть преобразован), к примеру, =12 ="12" =5+7 =A1*1,25 =ПИ() =СУММ(A:A) =ЕСЛИ(МЕСЯЦ(СЕГОДНЯ())=5;A1;B1) =Имя_Ячейки =Имя_Формулы и т.п.
К сожалению, разработчики разрешили и ввод даты, поэтому, после ввода, например, 1.1.1900 или 1/1/1900 Вы получите 1, а после ввода 1.1.2009 или 1/1/2009 Вы получите, соответственно, 39814 (подробнее о датах в Excel)
После нажатии кнопки Отмена или Закрыть [X], Вы получите 0, но этого можно избежать, если заменить Double на Variant, и просто проверить не возвращает ли функция False

Dim iResult 'As Variant

iResult = Application.InputBox(Type:=1, Title:="", _
Prompt:="Введите число или формулу", Default:="=(2+2)*2")
 
If Not iResult Then
   MsgBox "Вы получили : " & iResult, , ""
Else
   MsgBox "Вы отказались от ввода", , ""
End If

Leave a Comment