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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2013, 09:40   #1
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию Не работает код ограничения диапазона в textbox

Всем доброго времени суток. У меня был код который я писал когда то под visual basic 5. Я перенес его в VBA (exel 2010) немного видоизменил, но он не работает. Суть кода в том что если txt1 пуст или диапазон значений выходит за пределы 670 и 780 мм, выдается сообщение об ошибке. как его исправить не знаю. Заранее спасибо.
вот и код,вложение ниже:

Private Sub Txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
txt1.MaxLength = 4
Select Case KeyAscii
Case 48 To 57
Case 13
txt1_Validation False
Case Else
KeyAscii = 0
End Select
End Sub
Private Sub txt1_Validation(Cancel As Boolean)
Select Case txt1.Value
Case 670 To 780
txt2.SetFocus
Case 0 To 669
Case 781 To 9999
Case Else: Cancel = True
End Select
If Trim(txt1.Text) = "" Then
txt1.SetFocus
Dim Answer
Dim Message
Dim ButtonsAndIcon
Dim Title
Message = "Введите значение давления!"
ButtonsAndIcon = vbInformation
Title = "Ошибка!"
Answer = MsgBox(Message, ButtonsAndIcon, Title)
ElseIf (CLng(txt1.Text) < 670) Or (CLng(txt1.Text) > 780) Then
txt1.SetFocus
Dim Answer1
Dim Message1
Dim ButtonsAndIcon1
Dim Title1
Message1 = "Диапазон давления от 670 до 780 мм.рт.ст.!"
ButtonsAndIcon1 = vbInformation
Title1 = "Ошибка!"
Answer1 = MsgBox(Message1, ButtonsAndIcon1, Title1)
Cancel = True
End If
Exit Sub
End Sub
Вложения
Тип файла: zip Проверка данных.zip (13.1 Кб, 9 просмотров)
konstantin1990 вне форума Ответить с цитированием
Старый 18.08.2013, 10:18   #2
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

А событие txt1_Validation Вы сами выдумали? Используйте событие txt1_Exit для проверки содержимого.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 18.08.2013, 13:20   #3
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
А событие txt1_Validation Вы сами выдумали? Используйте событие txt1_Exit для проверки содержимого.
нет я его не придумывал. В VB 5.0 было что то подобное там событие называлось validate вроде. при использовании процедуры exit возникает ошибка компиляции. название процедуры не соответствует описанию, кстати, если из кода удалить строку case 13 немного оживает код, но работает глупо.

Последний раз редактировалось konstantin1990; 18.08.2013 в 13:27.
konstantin1990 вне форума Ответить с цитированием
Старый 18.08.2013, 14:03   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Ошибки нет
Код:
Private Sub txt1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case txt1.Value
    Case 670 To 780
        txt2.SetFocus
    Case 0 To 669
    Case 781 To 9999
    Case Else: Cancel = True
    End Select
    If Trim(txt1.Text) = "" Then
        txt1.SetFocus
        Dim Answer
        Dim Message
        Dim ButtonsAndIcon
        Dim Title
        Message = "Введите значение давления!"
        ButtonsAndIcon = vbInformation
        Title = "Ошибка!"
        Answer = MsgBox(Message, ButtonsAndIcon, Title)
    ElseIf (CLng(txt1.Text) < 670) Or (CLng(txt1.Text) > 780) Then
        txt1.SetFocus
        Dim Answer1
        Dim Message1
        Dim ButtonsAndIcon1
        Dim Title1
        Message1 = "Диапазон давления от 670 до 780 мм.рт.ст.!"
        ButtonsAndIcon1 = vbInformation
        Title1 = "Ошибка!"
        Answer1 = MsgBox(Message1, ButtonsAndIcon1, Title1)
        Cancel = True
    End If
    Exit Sub
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 18.08.2013, 16:02   #5
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

Да теперь все работает, для ограничения диапазона немного доделал теперь буду использовать как шаблон:


Код:
Private Sub Txt1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
txt1.MaxLength = 4
    Select Case KeyAscii
        Case 48 To 57
        Case 13
        Case Else
           KeyAscii = 0
    End Select
End Sub
Private Sub txt1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Select Case txt1.Value
       Case 670 To 780
           txt2.SetFocus
Case 0 To 669
Case 781 To 9999
Case Else: Cancel = True
End Select
If Trim(txt1.Text) = "" Then
txt1.SetFocus
txt1.Value = ""
Dim Answer
Dim Message
Dim ButtonsAndIcon
Dim Title
Message = "Введите значение давления!!"
ButtonsAndIcon = vbInformation
Title = "ошибка!"
Answer = MsgBox(Message, ButtonsAndIcon, Title)
ElseIf (CLng(txt1.Text) < 670) Or (CLng(txt1.Text) > 780) Then
txt1.SetFocus
txt1.Value = ""
Dim Answer1
Dim Message1
Dim ButtonsAndIcon1
Dim Title1
Message1 = "Диапазон давления от 670 до 780 мм.рт.ст.!"
ButtonsAndIcon1 = vbInformation
Title1 = "ошибка!"
Answer1 = MsgBox(Message1, ButtonsAndIcon1, Title1)
Cancel = True
End If
Exit Sub
End Sub

Последний раз редактировалось konstantin1990; 18.08.2013 в 16:05.
konstantin1990 вне форума Ответить с цитированием
Старый 18.08.2013, 17:45   #6
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

а нет другой процедуры помимо txt1_exit? При закрытии формы возникает сообщение введите давление. Здесь вариант с exit не подходит. файл ниже
Вложения
Тип файла: zip Программа 3.zip (181.7 Кб, 8 просмотров)

Последний раз редактировалось konstantin1990; 18.08.2013 в 17:53.
konstantin1990 вне форума Ответить с цитированием
Старый 18.08.2013, 18:06   #7
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Вы можете посмотреть сами какие есть события у текстбокса раскрыв вып. список в редакторе. Выбирайте, что Вам больше подойдет.
Изображения
Тип файла: gif 2013-08-18_170335.gif (22.4 Кб, 145 просмотров)
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 18.08.2013, 18:53   #8
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

а есть возможность сделать ограничение по вводу диапазона через процедуру change?
konstantin1990 вне форума Ответить с цитированием
Старый 18.08.2013, 18:59   #9
kuklp
Участник клуба
 
Регистрация: 02.05.2010
Сообщений: 1,390
По умолчанию

Делайте, кто не дает. Только change будет возникать после введения каждого символа. Оно Вам надо? Проще сделать проверку по нажатии кнопки выход(или что там у Вас) и не морочить себе голову.
mailto: kuklp60@gmail.com, ящики для благодарностей:
WM Z206653985942, R334086032478, U238399322728
kuklp вне форума Ответить с цитированием
Старый 18.08.2013, 19:28   #10
konstantin1990
Пользователь
 
Регистрация: 20.07.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от kuklp Посмотреть сообщение
и не морочить себе голову.
Пожалуй вы правы. Сделал на comandbutton, единственная проблема не работает установка фокуса. не знаю почему вроде пишу

Код:
Private Sub calc_Click()
' îãðàíè÷åíèå äàâëåíèÿ
Select Case presstxt.Value
Case 0 To 898
Case 1014 To 9999
Case Else: Cancel = True
End Select
If Trim(presstxt.Text) = "" Then
presstxt.SetFocus
Dim Answer
Dim Message
Dim ButtonsAndIcon
Dim Title
Message = "Ââåäèòå çíà÷åíèå äàâëåíèÿ!"
ButtonsAndIcon = vbInformation
Title = "Îøèáêà!"
Answer = MsgBox(Message, ButtonsAndIcon, Title)
ElseIf (CLng(presstxt.Text) < 899) Or (CLng(presstxt.Text) > 1013) Then
presstxt.Value = ""
presstxt.SetFocus
Dim Answer1
Dim Message1
Dim ButtonsAndIcon1
Dim Title1
Message1 = "Äèàïàçîí äàâëåíèÿ îò 899 äî 1013 ìèëëèáàð!"
ButtonsAndIcon1 = vbInformation
Title1 = "Îøèáêà!"
Answer1 = MsgBox(Message1, ButtonsAndIcon1, Title1)
Cancel = True
End If

End Sub
но не работает
konstantin1990 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Внести данные из Textbox Form2 в TextBox Form1 uralshans Microsoft Office Excel 1 07.01.2013 17:15
Не работает код ctpz PHP 11 20.09.2012 14:03
Не работает код Sylar9 Общие вопросы C/C++ 1 03.04.2012 19:32
Код не работает в IE asdasdasdasd HTML и CSS 5 24.08.2010 19:36
Не работает код... prizrak1390 Общие вопросы Delphi 3 22.10.2008 14:59