Nhờ Anh chị sửa giùm code keypress (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ngothanhluan

Thành viên chính thức
Tham gia
25/6/13
Bài viết
70
Được thích
3
Em có đoạn code sau để chỉ cho phép nhập số vào thôi, em định tách phần giữa ra để có gì call ra xài cho tiện vì userform có nhiều textbox. Không hiểu sao nó cứ báo lỗi ngay biến j, mong anh chị giúp em.
Mã:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'chi cho phep nhap so vao textbox nhap tien 
Dim i As String, j As TextBox
    i = Me.ActiveControl.Name
    i = Mid(i, 8, Len(i) - 7)
    j = "Textbox" & i
Select Case KeyAscii
Case Asc("0") To Asc("9")
If InStr(1, j, ".") > 0 Or Len(j) > 2 Then
KeyAscii = 0
End If
Case Else
KeyAscii = 0
End Select
End Sub
 
Em có đoạn code sau để chỉ cho phép nhập số vào thôi, em định tách phần giữa ra để có gì call ra xài cho tiện vì userform có nhiều textbox. Không hiểu sao nó cứ báo lỗi ngay biến j, mong anh chị giúp em.
Mã:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'chi cho phep nhap so vao textbox nhap tien 
Dim i As String, j As TextBox
    i = Me.ActiveControl.Name
    i = Mid(i, 8, Len(i) - 7)
    j = "Textbox" & i
Select Case KeyAscii
Case Asc("0") To Asc("9")
If InStr(1, j, ".") > 0 Or Len(j) > 2 Then
KeyAscii = 0
End If
Case Else
KeyAscii = 0
End Select
End Sub
đưa thêm cái file nữa bạn ơi, sẽ có người giúp, chứ có code mà không có file cũng hơi thua thua
 
Upvote 0
Đây là file, mong bạn giúp đỡ
Bạn xoá sub đã có của bạn đi và chép đọan sau vào thử xem đúng ý bạn không?
PHP:
Private Sub TextBox2_Change()
    InputNumbers
End Sub

Private Sub InputNumbers()
    If TypeName(Me.ActiveControl) = "TextBox" Then
        With Me.ActiveControl
            If Not IsNumeric(.Value) And .Value <> vbNullString Then
                MsgBox "Only numbers allowed!"
                .Value = vbNullString
            End If
        End With
    End If
End Sub
 
Upvote 0
Code của bạn có 1 số vấn đề:
1/Bạn khai báo biến J chưa được vì VBA không hiểu biến này. Phải khai báo như sau:
-Dim j as Control
-Dim j as MSForms.TextBox

2/Việc gán các biến đối tượng không thể gán thông thường được mà phải dùng Set:

Set j=me.Textbox1

3/Textbox là tên của 1 nhóm điều khiển trên Form nên gán theo cú pháp của bạn bị từ chối. Phải gán như sau

Set j=Me.Controls("Textbox" & i)
 
Upvote 0
Anh sealand ơi, Em có khai báo biến như trên nhưng nó vẫn báo lỗi, mong anh xem giúp
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Khổ rồi, đấy là các cách khai báo, bạn đưa cả vào thành Đông Tây y kết hợp nó thành Trung Đông y à. Bạn dùng 1 trong các cách ấy chứ!!!
 
Upvote 0
Dạ em đã làm được rồi, chân thành cảm ơn hai anh đã giúp đỡ.
 
Upvote 0
Còn một vấn đề em xin hỏi thêm trường hợp em muốn giá trị nhập vào không được lớn hơn 100 thì em viết thêm vào dòng điều kiện như sau, nhưng sao nó vẫn không hoạt động. Và khi em viết đoạn code trên vào một private sub khác và call vào trong từng sự kiện keypress của các textbox thì nó lại báo lỗi,mong anh giải đáp giúp.

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'chi cho phep nhap so vao textbox nhap tien
Dim i As String, j As MSForms.Textbox
i = Me.ActiveControl.Name
i = Right(i, Len(i) - 7)
set j = Me.Controls("Textbox" & i)
Select Case KeyAscii
Case Asc("0") To Asc("9")
If InStr(1, j, ".") > 0 Or Len(j) > 2 or Val(Textbox8)>100 Then
KeyAscii = 0
End If
Case Else
KeyAscii = 0
End Select
Set j = Nothing
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Lỉnh kỉnh quá nhưng không hiệu quả, nếu chỉ nhập số và nhỏ hơn 100 tôi thấy thế này cũng ổn

Mã:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'chi cho phep nhap so vao textbox nhap tien
If InStr(1, "0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
If Val(Me.TextBox2 & Chr(KeyAscii)) > 100 Then KeyAscii = 0
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom