Nhập số nhỏ hơn 30 vào Textbox VBA

Liên hệ QC

Thanhhoai00

Thành viên chính thức
Tham gia
19/7/20
Bài viết
58
Được thích
13
  • Mình có đoạn code như sau
  • Mình muốn người dùng chỉ được nhập vào Textbox Userform những số nhỏ hơn 30 ( chỉ được phép nhập vào Textbox Userform số từ 0 tới 29 )
  • Mình phải code thế nào , các bạn giúp mình xíu nhé
  • Cảm ơn các bạn rất nhiều ạ !!!!
 

File đính kèm

  • TEXTBOXVBA.xlsm
    14.1 KB · Đọc: 9
  • Mình có đoạn code như sau
  • Mình muốn người dùng chỉ được nhập vào Textbox Userform những số nhỏ hơn 30 ( chỉ được phép nhập vào Textbox Userform số từ 0 tới 29 )
  • Mình phải code thế nào , các bạn giúp mình xíu nhé
  • Cảm ơn các bạn rất nhiều ạ !!!!
GỢI Ý:
Bạn muốn có thông báo thì thế này:
Private Sub TextBox1_Change()
If Val(TextBox1.Value) > 29 Or Val(TextBox1.Value) < 1 Then
MsgBox "Chi duoc nhap so lon hon 0 va nho hon 30!"
End If
End Sub


Còn chỉ đơn thuần muốn xóa dữ liệu nhập sai thì:
Private Sub TextBox1_Change()
If Val(TextBox1.Value) > 29 Or Val(TextBox1.Value) < 1 Then
TextBox1.Value = ""
End If
End Sub


(Chưa xét đến người dùng nhập 1 ký tự dạng chuỗi)
 
Upvote 0
GỢI Ý:
Bạn muốn có thông báo thì thế này:
Private Sub TextBox1_Change()
If Val(TextBox1.Value) > 29 Or Val(TextBox1.Value) < 1 Then
MsgBox "Chi duoc nhap so lon hon 0 va nho hon 30!"
End If
End Sub


Còn chỉ đơn thuần muốn xóa dữ liệu nhập sai thì:
Private Sub TextBox1_Change()
If Val(TextBox1.Value) > 29 Or Val(TextBox1.Value) < 1 Then
TextBox1.Value = ""
End If
End Sub


(Chưa xét đến người dùng nhập 1 ký tự dạng chuỗi)
Cảm ơn bạn nhiều ạ !!
 
Upvote 0
GỢI Ý:
Bạn muốn có thông báo thì thế này:
Private Sub TextBox1_Change()
(Chưa xét đến người dùng nhập 1 ký tự dạng chuỗi)
Sử dụng sự kiện change khiến cho mỗi ký tự gõ vào/ xoá bớt đều chạy code. Nếu muốn bắt nhập lại thì dùng BeforeUpdate với tham số Cancel = True, nếu không bắt nhập lại thì dùng AfterUpdate
 
Upvote 0
Sử dụng sự kiện change khiến cho mỗi ký tự gõ vào/ xoá bớt đều chạy code. Nếu muốn bắt nhập lại thì dùng BeforeUpdate với tham số Cancel = True, nếu không bắt nhập lại thì dùng AfterUpdate
Cám ơn bác! Vụ sự kiện của các công cụ userform này tôi ít làm nên không rành. Do đó chỉ dám ghi gợi ý thôi.
 
Upvote 0
Cám ơn bác! Vụ sự kiện của các công cụ userform này tôi ít làm nên không rành. Do đó chỉ dám ghi gợi ý thôi.
Đa số người dùng không biết hết các sự kiện sử dụng trên form và chỉ dùng Change, kể cả 1 số thành viên GPE từng tạo những form hoành tráng.
 
Upvote 0
Đa số người dùng không biết hết các sự kiện sử dụng trên form và chỉ dùng Change, kể cả 1 số thành viên GPE từng tạo những form hoành tráng.
Không phải luôn luôn người ta dùng popup để báo lỗi.
Kiểu input nhanh, người ta có một cái label (hoặc từng label đi cặp với textbox) đểb báo lỗi. Tiết kiệm thời gian nhấn ok cúa popup.
 
Upvote 0
Cám ơn bác! Vụ sự kiện của các công cụ userform này tôi ít làm nên không rành. Do đó chỉ dám ghi gợi ý thôi.
Bạn sử dụng một trong hai sự kiện dưới đây để bẫy lỗi:

Mã:
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then Exit Sub
    If Val(TextBox1.Text) > 29 Then
        Cancel = True
        MsgBox "Ban chi duoc nhap tu 0 den 29", vbOKOnly + vbCritical, "THÔNG BÁO"
        TextBox1.Text = ""
    End If
End Sub

Hoặc:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then Exit Sub
    If Val(TextBox1.Text) > 29 Then
        Cancel = True
        MsgBox "Ban chi duoc nhap tu 0 den 29", vbOKOnly + vbCritical, "THÔNG BÁO"
        TextBox1.Text = ""
    End If
End Sub

Nhưng bạn cần phải có thêm một sự kiện ngăn người khác nhập không phải là SỐ, nếu nhập chữ thì nó ngăn không cho nhập:

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(ChrW(KeyAscii)) Then KeyAscii = 0
End Sub
 
Upvote 0
Bạn sử dụng một trong hai sự kiện dưới đây để bẫy lỗi:

Mã:
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then Exit Sub
    If Val(TextBox1.Text) > 29 Then
        Cancel = True
        MsgBox "Ban chi duoc nhap tu 0 den 29", vbOKOnly + vbCritical, "THÔNG BÁO"
        TextBox1.Text = ""
    End If
End Sub

Hoặc:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then Exit Sub
    If Val(TextBox1.Text) > 29 Then
        Cancel = True
        MsgBox "Ban chi duoc nhap tu 0 den 29", vbOKOnly + vbCritical, "THÔNG BÁO"
        TextBox1.Text = ""
    End If
End Sub

Nhưng bạn cần phải có thêm một sự kiện ngăn người khác nhập không phải là SỐ, nếu nhập chữ thì nó ngăn không cho nhập:

Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Not IsNumeric(ChrW(KeyAscii)) Then KeyAscii = 0
End Sub
Hay quá , cảm ơn bạn nhiều ạ !
 
Upvote 0
Có kiểm tra KeyPress rồi thì thôi không dùng hàm Val().

Với bài nhập số này thì dùng sự kiện Change() là hợp lý hơn cả.
 
Upvote 0
Upvote 0
Thớt thử code này. Nhớ đặt MaxLength của TextBox1 là 2.
Mã:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'set MaxLength = 2
Select Case KeyAscii
Case 48 To 57
    If Len(Me.TextBox1.Value) - Me.TextBox1.SelLength = 1 Then
        If Me.TextBox1.SelStart = 0 Then
            If KeyAscii > 50 Then KeyAscii = 0
        Else
            If CLng(Left(Me.TextBox1.Value, 1)) > 2 Then KeyAscii = 0
        End If
    End If
Case Else
    KeyAscii = 0
End Select
If KeyAscii = 0 Then Beep
End Sub
 
Upvote 0
Thời buổi này ai mà còn bíp nữa.
1. làm việc chung một phòng, cứ bíp hoài thiên hạ chửi thúi đầu.
2. vừa làm việc vừa đặt tai nghe nhạc, còn phya mới để ý đến bíp.
Bíp là thông báo trong code gốc của chủ thớt.
 
Upvote 0
Bài này làm thêm trường hợp số thập phân nữa, và trường hợp khi nhập một hay nhiều số 0 ở đầu vẫn hợp lệ.
 
Upvote 0
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom