-
RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa
MTNQ > 28-03-14, 07:20 PM
Cảm ơn bạn trunghieu đã bổ sung. Về sự kiện OnKeyPress mình đã giới thiệu tại đường link đầu tiên trong bài #7
Theo như đánh giá của Mod Noname thì cách của mình là tệ nhất?
Sao vậy nhỉ? -
RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa
MTNQ > 29-03-14, 12:09 PM
Chào các bạn!
Mình tiếp tục chỗ "một số vấn đề" còn bỏ dở trong bài viết trước (bài #9)
1-Vấn đề 1:
-Trước tiên mình giải thích lý do tại sao mình không dùng sự kiện On KeyPress
Nếu dùng On KeyPress ta không code đơn giản như hướng dẫn của MS hay bạn trunghieu được do vướng mắc về Tiếng Việt có dấu và các bộ gõ khác nhau mà sẽ phải code khá vất vả theo kiểu như sau:
Mã:Select Case KeyAscii
Case ... To .., ... to ...
KeyAscii = 0
Case 97 To 122
KeyAscii = Asc(UCase(Chr(KeyAscii)))
..........
End Select
Nhưng chỗ then chốt không nằm ở vấn đề trên mà là nếu người dùng không nhập trực tiếp từ bàn phím mà copy và paste thì sự kiện On KeyPress sẽ vô tác dụng
2-Vấn đề 2:
Do chủ top chỉ đưa ra dk 3 chữ cái in hoa, không đề cập đến có dấu TV hay không nên mình bỏ qua dk này
Nếu thêm Dk không dấu TV vào thì làm như sau:
-Validation rule (trong bảng hoặc trong thuộc tính của text box ) là:
Nếu chấp nhận bỏ trống thì thêm Or Is NullMã:(Len([Text3])=3 And Not Like "*[!a-z]*") ' Hoặc like "???" And Not Like "*[!a-z]*"
Sau đó tại sự kiện after update của text box bạn code như sau:
Mã:Private Sub Text3_AfterUpdate()
Me!Text3 = UCase(ConvertToNotSign(Me!Text3))
End Sub
Trong code trên thì:
-Text3 là tên text box
-ConvertToNotSign là Hàm chuyển từ có dấu sang không dấu trong Tiếng Việt Của Mod Xuân Thanh giới thiệu tại link sau:
http://thuthuataccess.com/forum/thread-7061.html
Như vậy cho dù người dùng nhập chữ in hoa hay chữ thường, có dấu hay không có dấu thì đều được chuyển thành In hoa không dấu
Chúc các bạn luôn trẻ khỏe và diễn đàn ngày một phát triển! -
RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa
Xuân Thanh > 29-03-14, 04:42 PM
Chắc chỉ cần thế này là đủ theo ý của chủ topic
Mã PHP:Private Sub txtABC_AfterUpdate()
If UCase(txtABC) <> txtABC Then
MsgBox "Phai nhap chu hoa" , , "Chu y"
Exit Sub '''' hoac gi gi do
ElseIf Len(txtABC) <> 3 Then
MsgBox "Chi duoc nhap 3 ky tu" , , "Chu y"
Exit Sub
ElseIf IsNumeric(Mid(txtABC,1,1)) = True Or IsNumeric(Mid(txtABC,2,1)) = True Or IsNumeric(Mid(txtABC,3,1)) = True Then
MsgBox " Khong duoc nhap so" , , "Chu y"
Exit Sub
End If
End Sub
Góp vui, các bạn tiếp tục nhé
Thân mến -
RE: Giúp đở khai báo tên trường chỉ nhận giá trị là 3 chữ cái in hoa
paulsteigel > 31-03-14, 02:34 PM
Góp vui thêm cùng bác Xuân thanh.... Thay vì dùng Msgbox thì nên dùng ngay lệnh cắt đi mấy ký tự thừa! Hoặc sử dụng kết hợp giữa Mask Edit và các kỹ thuật đã được giới thiệu cùng mấy cái dưới đây mà tôi hay dùng!
Xin giới thiệu thêm một cách vẫn hay làm (mọi người cũng đã nói hết cả rồi) đối với việc ngăn cấm nhập một số loại số liệu và một số loại hành động (ví dụ Cắt chẳng hạn) trong ứng dụng
Các bạn tham khảo qua nhé. Tất nhiên là tôi chưa kiểm soát phần chiều dài ký tự, cái đó cũng dễ kiểm soát thôi, nhưng sử dụng khi thủ tục lost_focus của textbox được kích hoạt!Mã PHP:'//Khai báo kiểu cho phép nhập liệu cho dễ dùng sau này
Public Enum KeyinMode
NumberType = 1 ' Chỉ cho nhập số
DateType = 2 ' Chỉ cho nhập kiểu ngày
FormularType = 3 ' Chỉ cho nhập dạng công thức
NumberOnlyType = 4 ' chỉ cho nhập số
FreeType = 5 ' cho nhập tất cả
End Enum
'////////////////////Đây là những thủ tục gắn trên form - giả sử là đối với textbox txtFIG_PLNST_DATE
'//
Private Sub txtFIG_PLNST_DATE_keypress(ByVal KeyAscii As MSForms.ReturnInteger)
ValidateKeycode KeyAscii, DateType
End Sub
'///Cái này để ngăn cấm dùng cắt dán chẳng hạn (tất nhien cả phần bấm phải chuột nữa cũng phải tính đến
Private Sub txtFIG_PLN_DATE_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
NoCutAction KeyCode, Shift
End Sub
'///////////////////Đây là những thủ tục để trong 1 module để có thể dùng nhiều với các textbox khác nhau
'//Cái này cấm dán
Sub NoCutAction(kCde As MSForms.ReturnInteger, ByVal ShiftKey As Integer)
If (ShiftKey And 2) And (kCde = Asc("V")) Then kCde = 0
End Sub
'//Cái này cho phép gõ một số thứ tùy theo lựa chọn
Sub ValidateKeycode(kCde As MSForms.ReturnInteger, Optional iNum As KeyinMode = 1)
Select Case iNum
Case 1:
If kCde <> vbKeyBack Then
If InStr("0123456789", ChrW(kCde)) = 0 Then
If InStr(".", ChrW(kCde)) <> 0 Then
kCde = AscW(AppLocale.DecimalSeparator)
Else
kCde = 0
End If
End If
End If
Case 2:
If InStr("0123456789/", ChrW(kCde)) = 0 And kCde <> vbKeyBack Then kCde = 0
Case 3:
If InStr("()+-*/0123456789", ChrW(kCde)) = 0 And kCde <> vbKeyBack Then kCde = 0
Case 4:
If InStr("0123456789", ChrW(kCde)) = 0 And kCde <> vbKeyBack Then kCde = 0
Case 5:
' enable free type
End Select
End Sub