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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 16:02   #1
nik1905
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
Восклицание проверка вводимых значений

есть userform с четыренмя полями:
договор
дата договора
контрагент
сумма договора
необходимо реализовать проверку корректности вводимых данных
дата - дата
договор и конрагент - строка
сумма договора - число

подскажите, пожалуйста как это реализвать

вот мой код:

Function proverka(tempstr As String) As Integer

Dim temp As String

proverka = 0
temp = tempstr

If temp <> "" Then
proverka = 1
Else
MsgBox "Некорректный ввод данных!", vbExclamation, "Error"
End If

End Function
Function proverka_dat(str As String) As Integer

Dim temp As String

proverka_dat = 0

temp = str

If IsDate(temp) Then
proverka_dat = 1
Else
Select Case temp
Case ""
MsgBox "Необходимо ввести дату!", vbExclamation, "Error"
Case Else
MsgBox "Некорректная дата!", vbExclamation, "Error"
End Select
End If
End Function

Private Sub OK_Click()

Dim n As Integer

Dim dok As String
Dim dat As String
Dim kon As String
Dim sum As String

Dim doki As Integer
Dim dati As Integer
Dim koni As Integer
Dim sumi As Integer

n = Range("A1").CurrentRegion.Rows.Coun t

met1:

dok = txtDok.Value
doki = proverka(dok)
If doki = 1 Then
Cells(n + 6, 3) = txtDok.Value
Else
GoTo met1
End If

dat = txtDat.Value
dati = proverka_dat(dat)
If dati = 1 Then
Cells(n + 7, 3) = txtDat.Value
Else
GoTo met1
End If


kon = txtKon.Value
koni = proverka(kon)
If koni = 1 Then
Cells(n + 8, 3) = txtKon.Value
Else
GoTo met1
End If


sum = txtSum.Value
sumi = proverka(sum)
If sumi = 1 Then
Cells(n + 9, 3) = txtSum.Value
Else
GoTo met1
End If

position.Hide

End Sub

Помогите, очень надо!!!!
Спасибо
nik1905 вне форума Ответить с цитированием
Старый 26.08.2009, 16:20   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

А что конкретно не получается?

PS: Код можно немного сократить:
Код:
Function proverka(tempstr As String) As Integer
    If Len(tempstr) Then proverka = 1 Else MsgBox "Некорректный ввод данных!", vbExclamation, "Error"
End Function

Function proverka_dat(str As String) As Integer
    If IsDate(str) Then
        proverka_dat = 1
    Else
        MsgBox IIf(Len(str), "Некорректная дата!", "Необходимо ввести дату!"), vbExclamation, "Error"
    End If
End Function
EducatedFool вне форума Ответить с цитированием
Старый 26.08.2009, 16:28   #3
nik1905
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
По умолчанию

зацикливается и не дает исправить незаполненные или неправильно заполненные поля... что типа: 12,01,01 если через запятые, то выскакивает окошко: "некорректная дата", но не дает возможности сделать исправления, вот в этом проблема!! тоже самое относительно пустых полей, после вывода ошибки необходима возможность ее исправления! подскажите, как решить?
nik1905 вне форума Ответить с цитированием
Старый 26.08.2009, 16:30   #4
nik1905
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
По умолчанию

может быть надо писать для каждого поля в отдельном subе для окошечка? и туда же засовывать проверку? или можно как-то изменить логику в предлагаемом коде?
nik1905 вне форума Ответить с цитированием
Старый 26.08.2009, 16:30   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
но не дает возможности сделать исправления, вот в этом проблема!
Нет ни малейшего желания воссоздавать Вашу форму для проверки кода.

Будет файл с формой - будет и решение.
EducatedFool вне форума Ответить с цитированием
Старый 26.08.2009, 16:38   #6
nik1905
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
По умолчанию

вот, посмотрите, пожалуйста!
Вложения
Тип файла: rar textbox.rar (29.1 Кб, 25 просмотров)
nik1905 вне форума Ответить с цитированием
Старый 26.08.2009, 17:00   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Попробуйте такой вариант:


Кнопка ОК будет недоступна, если в поля введены не все (или введены некорректные) значения.

Вот весь код:
Код:
Private Sub B_Дата1_Change_Click()
    Me.Date1 = Format(Get_Date(Me.Date1, Now), "DD-MM-YYYY")
End Sub

Private Sub B_Дата2_Change_Click()
    Me.Date2 = Format(Get_Date(Me.Date2, Now), "DD-MM-YYYY")
End Sub

Private Sub Date1_Change(): Проверка: End Sub
Private Sub Date2_Change(): Проверка: End Sub
Private Sub txtFIO_Change(): Проверка: End Sub
Private Sub txtDok_Change(): Проверка: End Sub
Private Sub txtKon_Change(): Проверка: End Sub
Private Sub txtSum_Change(): Проверка: End Sub

Sub Проверка()
    ДатыВведены = IsDate(Date1) And IsDate(Date2)
    ПоляЗаполнены = Len(Trim(txtFIO)) > 3 And IsNumeric(txtDok) And Len(Trim(txtKon)) > 3 And IsNumeric(txtSum)
    Me.OK.Enabled = ДатыВведены And ПоляЗаполнены
End Sub

Private Sub UserForm_Initialize()
    Me.Date1 = Format(Now - 2, "DD-MM-YYYY")
    Me.Date2 = Format(Now, "DD-MM-YYYY")
End Sub

Private Sub OK_Click()
    [c5] = Me.Date1: [c6] = txtFIO: [c9] = txtDok: [c8] = Me.Date2
    [c10] = txtKon: [c11] = txtSum
    Unload Me
End Sub

Последний раз редактировалось EducatedFool; 26.08.2009 в 17:02.
EducatedFool вне форума Ответить с цитированием
Старый 26.08.2009, 17:06   #8
nik1905
Пользователь
 
Регистрация: 27.07.2009
Сообщений: 27
По умолчанию

Спасибо за помощь!!! Буду разбираться...
nik1905 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка уникальных значений в столбце kostya.myit Microsoft Office Excel 14 04.11.2012 10:33
проверка вводимых значений не производится при удалении Air_kplp Microsoft Office Excel 7 29.05.2009 09:01
проверка значений в ListBox Arteom Компоненты Delphi 10 26.05.2008 12:32
Реестр вводимых документов Sum Microsoft Office Excel 1 07.04.2008 18:28
Работа с текст. файлом, проверка значений в нем. Vishez Помощь студентам 11 07.05.2007 21:59