Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2015, 09:28   #1
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию Проверка значения Inputbox

Доброго времени суток!
Уважаемые форумчане, прошу помочь с макросом!
Слабое место в макросе - в начале пользователь должен указать период (квартал - 1,2,3,4) через Inputbox. Не получатся сделать проверку введенного пользователем значения KW (квартал) - допустимые значения только 1,2,3,4.
Подскажите, пжл, как сделать? Сделал вот так - получается зацикливание, любое введеное значение воспринимается как неправильное.
Чтобы снова не сказали, что я сам не понимаю того, что хочу сделать - нужно ограничить значения, которые можно ввести через Inputbox. Допустимые значения -1,2,3,4 (номера кварталов).

Код:
Ввод:
KW = CLng(Val(InputBox("Укажите период(1,2,3,4 квартал), за который нужно сформировать отчет")))
If KW < 1 And KW > 4 Then
GoTo Дальше
Else:
MsgBox "Вы неправильно указали период! Допустимые значения 1,2,3,4"
GoTo Ввод
End If

Дальше:
27102014 вне форума Ответить с цитированием
Старый 28.04.2015, 09:44   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Вариант (с дробными как-то некузяво...):
Код:
Ввод:
    Do
        KW = CLng(Val(InputBox("Укажите период(1,2,3,4 квартал), за который нужно сформировать отчет")))
        If KW < 1 Or KW > 4 Then
            MsgBox "Вы неправильно указали период! Допустимые значения 1,2,3,4"
        Else
            Exit Do
        End If
    Loop
Дальше:
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 28.04.2015, 10:10   #3
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

(с дробными как-то некузяво...)

Почему? все работает отлично!!! Спасибо!!!
у InputBox стоит ограничение на ввод только целых чисел CLng(Val(InputBox ...))), и даже если ввести "2 квартал", то KW = 2, соответственно, "2,3", то KW = 2
27102014 вне форума Ответить с цитированием
Старый 28.04.2015, 10:11   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Введите полтора и угадайте какой квартал получится...
Ввожу полтора на цифровой клавиатуре - в зависимости от раскладки получаю 1 или 2!
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.04.2015 в 10:14.
Hugo121 вне форума Ответить с цитированием
Старый 28.04.2015, 10:31   #5
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Введите полтора и угадайте какой квартал получится...
Ввожу полтора на цифровой клавиатуре - в зависимости от раскладки получаю 1 или 2!
Не сразу понял о чем Вы говорите - для ввода цифр пользуюсь "цифрами справа на клавиатуре"

Вроде коллеги поступают аналогично. В принципе наверное это не особо критично, т.к. KW не самая главная переменная в коде - далее будет еще проверка. Интересно только почему так получается и в чем разница между вводимыми цифрами?
Вот весь код
Код:
Sub VES_TR()
Путь = ThisWorkbook.Path
    
    Do
        KW = CLng(Val(InputBox("Укажите период(1,2,3,4 квартал), за который нужно сформировать отчет")))
        If KW < 1 Or KW > 4 Then
            MsgBox "Вы неправильно указали период! Допустимые значения 1,2,3,4"
        Else
            Exit Do
        End If
    Loop

Имя = Sheets("Оглавление").Range("G2") & "_" & Sheets("Оглавление").Range("G3") & "_" & " кв_" & KW & "_" & Sheets("Оглавление").Range("D17") & ".xlsb"

Name = Путь & "\" & Sheets("Оглавление").Range("D17") & "\" & KW & " квартал" & "\" & Имя

' отключаем уведомления
Application.DisplayAlerts = False

Папка = Путь & "\" & Sheets("Оглавление").Range("D17") & "\" & KW & " квартал"

        If Len(Dir(Папка, vbDirectory)) = 0 Then   'проверка существования папки
        MkDir Папка 'создаем папку нужного периода
           Else:  Select Case MsgBox("Такая папка уже существует, открыть папку?", vbYesNo)
                    Case vbYes
                      Shell "explorer.exe " & Папка, vbMaximizedFocus 'открытие папки
                      Exit Sub
                    Case vbNo 'или Case Else
                      MsgBox "Отчет не сформирован"
                      Exit Sub
                    End Select
         End If

'Отключение режима обновления экрана
Application.ScreenUpdating = False

'Открытие формы 8-ВЭС для копирования в новую папку
Application.Workbooks.Open (Путь & "\" & Sheets("Оглавление").Range("D17") & "\" & "8-ВЭС" & ".xlsb")

'сохраняем копию книги
ActiveWorkbook.SaveCopyAs Filename:=Name
ActiveWindow.Close ' закрытие

'Включение режима обновления экрана
Application.ScreenUpdating = True

'Открытие формы 8-ВЭС в новой папке для работы
Application.Workbooks.Open (Name)

Sheets("Обновить").Select

' включаем уведомления
Application.DisplayAlerts = True

MsgBox "Для формирования отчета выберети год, период и нажмите кнопку 'Сформировать отчет'"

End Sub
27102014 вне форума Ответить с цитированием
Старый 28.04.2015, 10:35   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

смотрите, что Вы проверяете
Цитата:
If KW < 1 And KW > 4 Then
в математике есть такое число, которое было бы ОДНОВРЕМЕННО меньше 1 и больше 4???
проверяется не то, что Вы думаете, а то что Вы написали
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 28.04.2015, 10:46   #7
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Игорь, а в чем собственно проблема?
Здесь проверяются два условия
1) KW < 1
2) KW > 4

Поиска числа вроде бы нет....

Понял ошибку - вместо And нужно было поставить Or

Последний раз редактировалось 27102014; 28.04.2015 в 10:50.
27102014 вне форума Ответить с цитированием
Старый 28.04.2015, 12:42   #8
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Вариант (с дробными как-то некузяво...)
кузяво
Код:
 KW = CLng(Left$(InputBox("Укажите период(1,2,3,4 квартал), за который нужно сформировать отчет"), 1))
RAN. вне форума Ответить с цитированием
Старый 28.04.2015, 13:35   #9
27102014
Форумчанин
 
Регистрация: 27.10.2014
Сообщений: 248
По умолчанию

Я тоже не совсем понял значение этого слова, спасибо за код!
Немного Вас поправлю = не хватает ")"
Код:
KW = CLng(Left$((InputBox("Укажите период(1,2,3,4 квартал), за который нужно сформировать отчет")), 1))
27102014 вне форума Ответить с цитированием
Старый 28.04.2015, 13:52   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

https://www.google.lv/search?q=%D0%B...EsuhsgGPnoHwBQ
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка вводимого значения в Flash ActionScript ksvsvk Общие вопросы Web 1 28.11.2014 17:25
Проверка значения ячейки. II_Dimit_II БД в Delphi 0 02.06.2013 17:24
Проверка значения в дэлфи Игорь Обухов Помощь студентам 22 18.06.2012 16:58
ADoQuery inputbox сравнить значения detalik Помощь студентам 2 18.05.2011 08:31
Проверка введенного значения yourself Microsoft Office Excel 4 21.04.2008 18:40