Страницы: 1
RSS
Проверка TextBox по нажатию CommandButton
 
Добрый день. Есть два текстбокса. Текстбокс1 идёт кол-во нормы (фиксированное), в текстбокс2 вводиться само кол-во. Нужна проверка по нажатию. Т.е. если текстбокс2 разделить на текстбокс1 получиться целое число, то всё оке, если же нет, то сообщение, что введено неверное кол-во. На вас вся надежда. Заранее спасибо.
 
А, ну раз
Цитата
Дмитрий Баранов написал:
На вся надежда.
то:
Код
Private Sub TextBox2_AfterUpdate()
    Dim d As Double
    d = Me.TextBox2.Value / Me.TextBox1.Value
    If Int(d) <> d Then MsgBox "Введено неверное кол-во.", vbInformation   
End Sub
 
МатросНаЗебре, спасибо большое. Всё работает.
 
Код
Private Sub TextBox2_AfterUpdate()
    If Me.TextBox2.Value Mod Me.TextBox1.Value <> 0 Then MsgBox "Введено неверное кол-во.", vbInformation   
End Sub
Изменено: Nordheim - 09.03.2021 12:23:40
"Все гениальное просто, а все простое гениально!!!"
 
В идеале проверка на деление как целых, так и десятых. Так же на пустую ячейку (либо условие, если TextBox пустой, то следующее действие). Заранее спасибо.
 
А так?
Код
Private Sub TextBox2_AfterUpdate()
    Dim v1 As Variant
    Dim v2 As Variant
    
    v1 = Me.TextBox1.Value
    v2 = Me.TextBox2.Value
    
    transform_value v1
    transform_value v2
    
    If IsNumeric(v1) Then
    If IsNumeric(v2) Then
    If v1 <> 0 Then
        Dim d As Double
        d = v2 / v1
        If Int(d) <> d Then myMsgBox
        Exit Sub
    End If
    End If
    End If
    
    myMsgBox
End Sub

Private Sub transform_value(v As Variant)
    v = Replace(v, ".", ",")
    If IsNumeric(v) Then v = CDbl(v)
End Sub

Private Sub myMsgBox()
    MsgBox "Введено неверное кол-во.", vbInformation
End Sub
 
МатросНаЗебре, решил сделать так:
Код
Private Sub TextBox2_AfterUpdate()
Dim v1 As Variant
Dim v2 As Variant
     
    v1 = Me.TextBox1.Value
    v2 = Me.TextBox2.Value
     
    transform_value v1
    transform_value v2
    If TextBox1.Value = "" Then
    Exit Sub
    End If
    If IsNumeric(v1) Then
    If IsNumeric(v2) Then
    If v1 <> 0 Then
        Dim d As Double
        d = v2 / v1
        If Int(d) <> d Then myMsgBox
        Exit Sub
    End If
    End If
    End If
     
    myMsgBox
End Sub

Для меня вроде подходит. Если пустое значение, то просто без проверки жмётся кнопка, если есть значение, то делает проверку и если всё оке, жмётся дальше. Вот только если после ошибки ещё раз прожать кнопку, то действия не происходит в текстбоксе. Пытался блокировать кнопку, если вышло сообщение. Блокирует, но висит вся форма(
 
Так не будет сообщать, есть значение первого текстбокса пусто.
Код
Private Sub TextBox2_AfterUpdate()
    Dim v1 As Variant
    Dim v2 As Variant
     
    v1 = Me.TextBox1.Value
    If v1 = "" Then Exit Sub
    v2 = Me.TextBox2.Value
     
    transform_value v1
    transform_value v2
     
    If IsNumeric(v1) Then
    If IsNumeric(v2) Then
    If v1 <> 0 Then
        Dim d As Double
        d = v2 / v1
        If Int(d) <> d Then myMsgBox
        Exit Sub
    End If
    End If
    End If
     
    myMsgBox
End Sub
 
спасибо, поправил, очень помогли!

Осталось решить с блокировкой кнопки либо просто сделать очистку TextBox2 и не мучиться.  

TextBox1 - это норма упаковки. Например "10.5"
TextBox2 - это кол-во, которое вводит пользователь для заявки на отгрузку.
После ввода жмёт кнопку добавить и позиция садиться в заявку.
Если ввести 11, то соответственно выскачет MsgBox и уведомит об ошибке. И вот если после закрытия MsgBox  ещё раз нажать кнопку добавления не меняя TextBox2, то она добавит позицию.
 
Такой вариант будет блокировать кнопку CommandButton1.
Код
Private Sub TextBox1_AfterUpdate()
    TextBoxes_AfterUpdate
End Sub

Private Sub TextBox2_AfterUpdate()
    TextBoxes_AfterUpdate
End Sub

Private Sub TextBoxes_AfterUpdate()
    Dim v1 As Variant
    Dim v2 As Variant
      
    v1 = Me.TextBox1.Value
    If v1 = "" Then Exit Sub
    v2 = Me.TextBox2.Value
      
    transform_value v1
    transform_value v2
      
    Me.CommandButton1.Enabled = True
      
    If IsNumeric(v1) Then
    If IsNumeric(v2) Then
    If v1 <> 0 Then
        Dim d As Double
        d = v2 / v1
        If Int(d) <> d Then myMsgBox
        Exit Sub
    End If
    End If
    End If
      
    myMsgBox
End Sub

Private Sub transform_value(v As Variant)
    v = Replace(v, ".", ",")
    If IsNumeric(v) Then v = CDbl(v)
End Sub
 
Private Sub myMsgBox()
    Me.CommandButton1.Enabled = False
    MsgBox "Введено неверное кол-во.", vbInformation
End Sub
 
МатросНаЗебре, огромное спасибо Вам за помощь! Решил оставить очистку в случае ошибки.
Страницы: 1
Наверх