Новости:

Подпишитесь на рассылку новых сообщений форума через службу рассылок: Subscribe.ru

Главное меню

Проверка значений inputbox

Автор sdwig, 01.03.2012, 17:01

« назад - далее »

sdwig

Добрый день.

Подскажите возможно ли в inputbox реализовать проверку введенных значений по списку. Т.е. имеется список значений и введенное значение должно быть строго из этого списка. Если значение не из списка - макрос завершаем.

Заранее благодарю.

kuklp

Да, возможно. Но лучше использовать комбобокс со списком допустимых значений.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

sdwig

Довольно большой список получается для комбобокса - больше ста значений, не очень удобно.
В идеале всё же хотел бы реализовать через inputbox.
Я вижу такую реализацию - после ввода значения макрос осуществляет поиск по столбцу с допустимыми значениями, если значение не найдено - выдаёт сообщение об ошибке и останавливает макрос, если значение в списке есть - продолжает выполнение макроса.
Знаю как реализовать подобное формулами, а как макросом сделать без понятия.

ShAM

Цитироватьмакрос осуществляет поиск по столбцу с допустимыми значениями.
Файл дайте, где этот столбец.

sdwig

Добавил файл (странно что форум не даёт добавлять файлы с расширением .xlsm)

RAN

Это хорошо!
Поскольку IE8 с интернета такие файлы не открывает, то и смотреть вряд ли стал.
И непонятно, зачем вам xlsm нужен был к пустому файлу?
Sub qqq()
If Not Range(Cells(1, 1), Cells(1, 1).End(xlDown)). _
Find(InputBox("Ищем"), , , xlWhole) Is Nothing Then
MsgBox "Нашли!"
Else
MsgBox "Не нашли!"
End If
End Sub

sdwig

Спасибо. То что нужно!
А файл был .xlsm, так как эта проверка часть другого макроса, который полностью выкладывать не стал и удалил из файла.

sdwig

Вернее почти то что нужно :)

Я вставил Ваш код в свой макрос, теперь он выглядит так:

Dim s As String


Sub Input_check()

s = (InputBox("Введите номер"))                                               'input box to identify p\n

If s = "" Then
       MsgBox "Значение для поиска не введено", vbInformation, ""
Exit Sub                                                                                    'input box empty
If s = False Then Exit Sub                                                            'inputbox was canceled, do i need this row in macros???End If

Sheets("Service").Select                                                              'check the list of numbers
If Not Range(Cells(1, 1), Cells(1, 1).End(xlDown)). _
Find(s) Is Nothing Then
Call Movements_History
Else: MsgBox "Номер на найден." & vbCrLf & "Проверьте введенное значение."
Sheets("Numbers").Select
End If
End Sub


Единственное, что не совсем корректно - поиск по наличию номера в списке не точный. Т.е. если ввести для поиска , например, "12", то макрос думает что такое значение есть так как в столбце есть номера  в составе которых есть "12". Не подскажете как сделать поиск точным или ввести ограничение на минимальное кол-во вводимых символов при поиске?

RAN

Интересно девки пляшут!
Сначала выкидываем из макроса ту часть, которая задает поиск по точному совпадению, а затем спрашиваем - что делать?

sdwig

Всё, понял :)  Затупил.
xlWhole потерял
Спасибо ещё раз.

sdwig

Столкнулся с ещё одной проблемой - как исключить выпадение макроса в ошибку при вводе неверного типа данных в inputbox?

Допустим есть такой код:
Sub input()

Dim d As Date

d = Application.InputBox("Введите дату в формате ДД.ММ.ГГГГ")
If d = 0 Then
    MsgBox "Значение не введено", vbOKOnly
    Exit Sub
End If
ActiveCell.Value = d

'MsgBox Format(d, "dd mmm yyyy")                         'just for test


end Sub


Как сделать, чтобы макрос не выпадал с ошибкой в случае если вместо даты ввели текст или, например, ввели несуществующую дату (30.02.2012).

sdwig

Кому интересно - реализовал проверку следующим образом:

Sub input()

Dim d_string As String, d_date As Date

'input date (need add checking the date format after input)

d_string = InputBox("Введите дату в формате ДД.ММ.ГГГГ")


If d_string = "" Then
    MsgBox "Значение не введено", vbOKOnly
    Exit Sub
End If

If IsDate(d_string) = False Then                           'check the input format (should be possible to convert in date)
MsgBox "Проверьте формат введенной даты", vbOKOnly
Exit Sub

Else
d_date = CVDate(d_string)             


Теперь при вводе текста или несвязных символов вместо даты макрос не выпадает в ошибку, а завершает работу, выдав предупреждающее сообщение.