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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2010, 17:14   #1
serikov
Пользователь
 
Регистрация: 16.07.2009
Сообщений: 29
По умолчанию InputBox выдает ошибку

Всем доброго дня!
Посмотрите в чем у меня ошибка. При нажатии cancel вылетает рантаймовская 13 ошибка.

Private Sub CallUserform3_Click() 'select department via password
beg: psw = InputBox("Введите пароль вашего цеха")
Select Case psw
Case 1
dept = "ЦМИ"
Sheets("lists").Range("b2..b5").Nam e = "ceh"
Case 2
dept = "ЦСИ"
Sheets("lists").Range("c2..c5").Nam e = "ceh"
Case 3
dept = "ЦЗИ"
Sheets("lists").Range("d2..d5").Nam e = "ceh"
Case Else
GoTo beg
End Select

UserForm5.Caption = dept
UserForm5.Calendar.Value = Date
UserForm3.Hide
UserForm5.lbl_dept_name = dept
UserForm5.Show


End Sub

Спасибо.
serikov вне форума Ответить с цитированием
Старый 01.09.2010, 17:30   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Может, переменная psw определена как числовая?
Определите переменную как String или Variant - и ошибки не будет.

Цитата:
Range("c2..c5")
Думал, что знаю синтаксис VBA...
Даже не предполагал, что так можно задавать диапазон ячеек.
Похоже, в Microsoft предусмотрели все возможные варианты записи адреса диапазона... (точек, как выяснилось, можно ставить сколько угодно)

Последний раз редактировалось EducatedFool; 01.09.2010 в 17:32.
EducatedFool вне форума Ответить с цитированием
Старый 02.09.2010, 08:31   #3
serikov
Пользователь
 
Регистрация: 16.07.2009
Сообщений: 29
По умолчанию

Спасибо. Но проблема в другом. Ошибка выскакивает при отказе от ввода пароля прп нажатии кнопки cancel. Так код работает и ошибок не выдает. Если пишу в код обработчика ошибок, то получаю зацикливание процедуры, то есть пока код не введешь будешь тыкакаться в кнопку. Тоже не совсем гут.
serikov вне форума Ответить с цитированием
Старый 02.09.2010, 08:53   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Если пишу в код обработчика ошибок, то получаю зацикливание процедуры, то есть пока код не введешь будешь тыкакаться в кнопку. Тоже не совсем гут.
Извините, но этот алготиртм придумали вы...
Скажите, как должно работать, - сделаем.

Попробуйте так:
Код:
Private Sub CallUserform3_Click()    'select department via password
    txt = InputBox("Введите пароль вашего цеха")
    Select Case txt
        Case 1: dept = "ЦМИ"
        Case 2: dept = "ЦСИ"
        Case 3: dept = "ЦЗИ"
        Case Else: Exit Sub ' для выхода из процедуры
            ' или End 'для остановки всех макросов
    End Select
    Sheets("lists").Range("b2..b5").Name = "ceh"

    UserForm5.Caption = dept
    UserForm5.Calendar.Value = Date
    UserForm3.Hide
    UserForm5.lbl_dept_name = dept
    UserForm5.Show
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 02.09.2010, 10:57   #5
serikov
Пользователь
 
Регистрация: 16.07.2009
Сообщений: 29
По умолчанию

Я вроде бы понятно пишу, проблема возникает при отказе от ввода пароля в inputbox, то есть пользователь вместо "ОК" нажимает кнопку "cancel". В этот момент вылетает ошибка. Ее и нужно победить, все остальное работает. Диалог ОК-cancel это стандартная VBA панелька. Почему ее вырубает ВОТ ВОПРОС.
serikov вне форума Ответить с цитированием
Старый 02.09.2010, 11:15   #6
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

А так:

Код:
Private Sub CallUserform3_Click()

beg:     psw = InputBox("Введите пароль вашего цеха")
    Select Case psw
    Case 1
        dept = "ЦМИ"
        Sheets("lists").Range("b2..b5").Name = "ceh"
    Case 2
        dept = "ЦСИ"
        Sheets("lists").Range("c2..c5").Name = "ceh"
    Case 3
        dept = "ЦЗИ"
        Sheets("lists").Range("d2..d5").Name = "ceh"
    Case ""
        If MsgBox("Не введен код! Закрыть форму?", vbYesNo) = vbYes Then
            End
        Else: Exit Sub
        End If
    Case Else
        MsgBox "Неверный код!", vbYesNo
        GoTo beg
    End Select

    UserForm5.Caption = dept
    UserForm5.Calendar.Value = Date
    UserForm3.Hide
    UserForm5.lbl_dept_name = dept
    UserForm5.Show
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 02.09.2010, 12:06   #7
serikov
Пользователь
 
Регистрация: 16.07.2009
Сообщений: 29
По умолчанию

Не помогло....
serikov вне форума Ответить с цитированием
Старый 02.09.2010, 12:17   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от serikov Посмотреть сообщение
Не помогло....
Правда? У Вас переменной psw какой тип данных назначен? Что за ошибка? На какой строке ошибка?

Может имеет смысл так сделать?

Код:
Private Sub CallUserform3_Click()
dim psw as long
beg:     psw = val(InputBox("Введите пароль вашего цеха"))
    Select Case psw
    Case 1
        dept = "ЦМИ"
        Sheets("lists").Range("b2..b5").Name = "ceh"
    Case 2
        dept = "ЦСИ"
        Sheets("lists").Range("c2..c5").Name = "ceh"
    Case 3
        dept = "ЦЗИ"
        Sheets("lists").Range("d2..d5").Name = "ceh"
    Case 0
        If MsgBox("Не введен код! Закрыть форму?", vbYesNo) = vbYes Then
            End
        Else: Exit Sub
        End If
    Case Else
        MsgBox "Неверный код!", vbYesNo
        GoTo beg
    End Select

    UserForm5.Caption = dept
    UserForm5.Calendar.Value = Date
    UserForm3.Hide
    UserForm5.lbl_dept_name = dept
    UserForm5.Show
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 02.09.2010, 12:25   #9
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

А в других местах этого же файла InputBox работает нормально? Если нет, то попробуй в другой книге.
Если в другой книге работает, значит что-то у тебя с "References", а если не работает, то дело серьёзно!
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 03.09.2010, 10:26   #10
serikov
Пользователь
 
Регистрация: 16.07.2009
Сообщений: 29
По умолчанию

The_Prist большой респект. Удалось обойти! СПАСИБО!!!!
serikov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
форма выдает ошибку serikov Microsoft Office Excel 4 01.07.2010 23:18
Выдает ошибку( И.А.А. Общие вопросы C/C++ 1 21.05.2010 19:10
выдает ошибку! maksim_serg Microsoft Office Word 3 20.04.2010 04:19
Макрос выдает ошибку Romuald Microsoft Office Excel 2 15.04.2009 22:42
ADOQuery - выдает ошибку kiber0net0 Общие вопросы Delphi 2 02.09.2008 19:49