Chọn những ký tự có điều kiện trong combobox/ textbox

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Tôi có một combobox nguồn combobox là 3 ký tự : G - D - T
Làm cách nào để chỉ gõ vào được 1 trong 3 ký tự này mà không thể gõ vào ký tự khác được. Nhưng có thể xóa và thay thế 3 ký tự này với nhau được? Đồng thời chỉ gõ được 1 ký tự thôi.
Xin các Thầy, các Anh Chị hướng dẫn, giúp đỡ.
Cám ơn rất nhiều!
 

File đính kèm

Tôi có một combobox nguồn combobox là 3 ký tự : G - D - T
Làm cách nào để chỉ gõ vào được 1 trong 3 ký tự này mà không thể gõ vào ký tự khác được. Nhưng có thể xóa và thay thế 3 ký tự này với nhau được? Đồng thời chỉ gõ được 1 ký tự thôi.
Xin các Thầy, các Anh Chị hướng dẫn, giúp đỡ.
Cám ơn rất nhiều!
Trong bài của bạn hình như mới chỉ có Combobox liên kết dữ liệu thôi thì phải, làm "zì" nhe:
COMBOBOX1==> PROPERTIES ==>APPEARANCE ==> STYLES ==> 2- fmStyleDropDowList
Hên xui thôi, có khi đúng có khi sai
Thân
 
Upvote 0
Anh thêm vào code:
Mã:
Public k As String
 
Private Sub ComboBox1_Change()
k = ComboBox1
End Sub
 
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii > 0 Then
MsgBox "Ban ko dc go vao"
KeyAscii = 0
ComboBox1.Value = k
End If
End Sub
Để lấy lại ký tự gốc của nó là được thôi.
Thân.
 

File đính kèm

Upvote 0
Anh thêm vào code:
Mã:
Public k As String
 
Private Sub ComboBox1_Change()
k = ComboBox1
End Sub
 
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii > 0 Then
MsgBox "Ban ko dc go vao"
KeyAscii = 0
ComboBox1.Value = k
End If
End Sub
Để lấy lại ký tự gốc của nó là được thôi.
Thân.
Cách này lại không cho bất cứ ký tự nào vào, kể cả 3 ký tự đã có sẳn, như vậy chưa đúng yêu cầu Po ơi.

Trong bài của bạn hình như mới chỉ có Combobox liên kết dữ liệu thôi thì phải, làm "zì" nhe:
COMBOBOX1==> PROPERTIES ==>APPEARANCE ==> STYLES ==> 2- fmStyleDropDowList
Hên xui thôi, có khi đúng có khi sai
Thân

Cách này em đã làm rồi, nó lại chấp nhận những ký tự khác hihihi. Em còn làm như vầy nữa nè: Match Entry > 0-fmMatchEntryFirstletter.
 
Upvote 0
Các này vẫn có thể khống chế hoặc cho phép bất cứ ký tự nào được mà!
Bác thử dùng tính năng Help VBA của Excel rồi nhập vào Ascii xem. Nó sẽ hiện ra 1 bảng danh sách cho mã số cho KeyAscii đó. Rồi tuỳ ý mình thêm bớt thôi.
Em nghĩ là khỏi cần nhập vào chi cho mệt, đã có danh sách rồi mà!
Mã:
Public k As String
 
Private Sub ComboBox1_Change()
k = ComboBox1
End Sub
 
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii > 0 And KeyAscii <> 100 And KeyAscii <> 103 And KeyAscii <> 116 Or Len(ComboBox1) > 0 Then
MsgBox "Ban ko dc go vao"
KeyAscii = 0
ComboBox1.Value = k
End If
End Sub

Match Entry: Trông có vẽ là nhập 1 ký tự nhưng thực chất là nó không phải vậy đâu. Nó dùng để lấy nhanh ký tự đầu của chuỗi tương ứng đó. Bác chỉ cần click phím muỗi tên qua 1 bên là có thể nhập tiếp rồi. Thường thì người ta thích Match Entry > 1 - MatchEntryComplete hơn. Bác cứ thử xem.

Còn Styles > 2- fmStyleDropDowList thì hợp lý rồi. Chỉ là hơi bị ép buộc thôi. Nhưng muốn nhanh thì nên chọn cái này.

Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Cách này em đã làm rồi, nó lại chấp nhận những ký tự khác hihihi. Em còn làm như vầy nữa nè: Match Entry > 0-fmMatchEntryFirstletter.[/QUOTE]
Dám độ 2 chai bia hông ? Bạn phải cho giá trị nó "zô" một cell nào đó trên bảng tính đi "zồi" test nó xem. Nếu bạn đúng mình vẫn mời một chầu như đã nói hôm "wa" + 2 ve, nếu mình đúng: sau khi mình tính tiền bạn phải mời lại 2 ve. yes or no
Thân
 
Upvote 0
Chỉ cần set property:
MatchRequired = True
Maxlength = 1

Gõ gì thì gõ chỉ được 1 ký tự rồi trơ trơ ra. Mà hễ không có trong list mà enter là nó chửi.
 
Lần chỉnh sửa cuối:
Upvote 0
Ban thử cách của mình (Bạn thêm phím Table và Arrow nhé)

PHP:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 68 Or KeyCode = 71 Or KeyCode = 84 Or KeyCode = 13 Then Exit Sub
KeyCode = 0
MsgBox "Khong nhap ky tu nay."
Me.ComboBox1.SetFocus
End Sub
 

File đính kèm

Upvote 0
Chỉ cần set property:
MatchRequired = True
Maxlength = 1

Gõ gì thì gõ chỉ được 1 ký tự rồi trơ trơ ra. Mà hễ không có trong list là nó chửi.
Cái này giống Styles > 2- fmStyleDropDowList rồi bác ơi.
Điểm yếu của nó là bị đơ ghi nhập 1 ký tự vào rồi -> Để khắc phục nó thì chỉ có code thôi! hhhii
Mã:
Public k As String
 
Private Sub ComboBox1_Change()
k = ComboBox1
End Sub
 
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 100 Or KeyAscii = 103 Or KeyAscii = 116 Then
    ComboBox1 = ""
    ComboBox1 = Chr(KeyAscii)
Else
    MsgBox "Ban ko dc go vao"
End If
KeyAscii = 0
ComboBox1.Value = k
End Sub
Bác xem file nha!
Thân.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Yêu cầu là:
có thể xóa và thay thế 3 ký tự này với nhau được? Đồng thời chỉ gõ được 1 ký tự thôi.

Vậy chỉ gõ 1 ký tự rồi đơ ra là phải rồi?
Còn không có trong list, nó báo lỗi thì phải xóa gõ chữ khác, đúng yêu cầu rồi?
Không biết xóa thế nào nữa thì thôi đi.
 
Upvote 0
Yêu cầu là:


Vậy chỉ gõ 1 ký tự rồi đơ ra là phải rồi?
Còn không có trong list, nó báo lỗi thì phải xóa gõ chữ khác, đúng yêu cầu rồi?
Không biết xóa thế nào nữa thì thôi đi.
Không! Em nghĩ là điều kiện cho bài này là:
+Gõ 1 ký tự
+Gõ 1 ký tự khác có trong List để thay được thì càng tốt (Cái đơ của bác nằm ở đây!)
+Gõ ký tự khác ngoài ký tự (ký tự đầu nếu list là chuỗi nhiều ký tự) trong List thì báo lỗi và không cho phép thay đổi ký tự hiện tại.
+Sử dụng được các phím mũi tên, phím xoá thì càng tốt (nhưng do là chỉ lấy trong List nên phím xoá sẽ là lấy ký tự đầu tiên trong List, nên vấn đề này coi nhưng đạt).
Thân.
 
Upvote 0
Sửa 1 chút trường hợp 2 ký tự hợp lệ
PHP:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then Exit Sub
If KeyCode = 68 Or KeyCode = 71 Or KeyCode = 84 Then
Me.ComboBox1 = Chr(KeyCode)
KeyCode = 0: Exit Sub
End If
KeyCode = 0
MsgBox "Khong nhap ky tu nay."
Me.ComboBox1.SetFocus
End Sub
 

File đính kèm

Upvote 0
@sealand: file của bác cũng đủ ý rồi đó. Nhưng nếu các phím mũi tên có thể tuỳ biến luôn thì hay hơn.
Thân.
 
Upvote 0
Việc thay thế chỉ việc thay câu lệnh
PHP:
If KeyCode = 13 Then Exit Sub
Bằng
PHP:
If KeyCode = 13 or KeyCode = 9 or KeyCode = 40 Then Exit Sub
Riêng phím Arrow nên để lại cho việc lượt danh sách nên không dùng cho di chuyển Object nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Đã thay thì thay cho hết luôn đi. Chừa làm gì nhỉ?
Mã:
If KeyCode = 38 Or KeyCode = 13 Or KeyCode = 9 Or KeyCode = 8 Or KeyCode = 40 Then Exit Sub
Thân.
 
Upvote 0
Em cám ơn các THẦY, các ANH đã giúp đỡ và hướng dẫn cho em rất nhiệt tình! Nhờ những phương pháp mới mẽ và kinh nghiệm đã giúp em từ cái yêu cầu ban đầu được mở rộng ra nhiều kiến thức mới. Thật sự em rất biết ơn. Xin cảm ơn.


Dám độ 2 chai bia hông ? Bạn phải cho giá trị nó "zô" một cell nào đó trên bảng tính đi "zồi" test nó xem. Nếu bạn đúng mình vẫn mời một chầu như đã nói hôm "wa" + 2 ve, nếu mình đúng: sau khi mình tính tiền bạn phải mời lại 2 ve. yes or no
Thân

ANH CONCOGIA ơi. Anh mời em cả chầu nhậu vào chiều thứ bảy tuần này rồi. Chẳng lẽ em lại ngại mời anh chỉ có 2 ve thôi sao? Nếu chắc ăn như bắp vậy thì Anh thắng rồi đấy! Vậy sẽ thêm 2 ve nữa hen! (À, bia chứ không phải 2 chai rượu là tèo em luôn đó khakhakha).
Cám ơn anh!
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi có một combobox nguồn combobox là 3 ký tự : G - D - T
Làm cách nào để chỉ gõ vào được 1 trong 3 ký tự này mà không thể gõ vào ký tự khác được. Nhưng có thể xóa và thay thế 3 ký tự này với nhau được? Đồng thời chỉ gõ được 1 ký tự thôi.
Xin các Thầy, các Anh Chị hướng dẫn, giúp đỡ.
Cám ơn rất nhiều!
Một cách khác để giới hạn ký tự nhập vào textbox, cho phép thay đổi ký tự nhập ngay trên form
Kytu.jpg


Textbox Ký tự nhập (TxtAscii) quy định ký tự được phép nhập (phân biệt chữ hoa, thường)

Textbox Nhập dữ liệu (TxtData) để nhập dữ liệu gồm các ký tự quy định trong TxtAscii

Mã:
Private Sub TxtData_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
For i = 1 To Len(TxtAscii)
  If KeyAscii = Asc(Mid(TxtAscii, i, 1)) Then Exit Sub
Next
KeyAscii = 0
End Sub
 

File đính kèm

Upvote 0
Nhờ "xào nấu" rất nhiều cách của các Thầy, các Anh mà mình mò ra đúng yêu cầu của mình là vừa làm code vừa kết hợp thuộc tính cho combobox: (các cách khác lưu lại thư viện code của mình xài sau hehe)
PHP:
'Dat thuoc tinh cho ComboBox1 la MatchEntry: 0 - fmMatchEntryFistLetter
Private Sub ComboBox1_Change()
  If ComboBox1 <> "G" And ComboBox1 <> "T" And ComboBox1 <> "D" Then ComboBox1 = "": Exit Sub
End Sub

Nhưng em chợt nghĩ, nếu có thể dùng hàm gì đó để quét qua cái rowsource của combobox1 có các chữ cái đầu tiên thì cho phép, còn không thì không cho ghi vào, chứ nếu cái combo có cả 24 ký tự thì viết kiểu em là oải luôn! Hướng dẫn cho em thêm nhé (Xin một lần "Được voi đòi hai bà Trưng")
Cám ơn rất nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ "xào nấu" rất nhiều cách của các Thầy, các Anh mà mình mò ra đúng yêu cầu của mình là vừa làm code vừa kết hợp thuộc tính cho combobox: (các cách khác lưu lại thư viện code của mình xài sau hehe)
PHP:
'Dat thuoc tinh cho ComboBox1 la MatchEntry: 0 - fmMatchEntryFistLetter
Private Sub ComboBox1_Change()
  If ComboBox1 <> "G" And ComboBox1 <> "T" And ComboBox1 <> "D" Then ComboBox1 = "": Exit Sub
End Sub
Nhưng em chợt nghĩ, nếu có thể dùng hàm gì đó để quét qua cái rowsource của combobox1 có các chữ cái đầu tiên thì cho phép, còn không thì không cho ghi vào, chứ nếu cái combo có cả 24 ký tự thì viết kiểu em là oải luôn! Hướng dẫn cho em thêm nhé (Xin một lần "Được voi đòi hai bà Trưng")
Cám ơn rất nhiều!
Bạn nói rõ mục đích cuối cùng của bạn đi, có khi sẽ giải quyết được nhanh gọn hơn!
Cái này có vẽ như LỌC quá nhỉ? Thế sao không bám vào AutoFilter ---> filter theo điều kiện gõ vào?
 
Upvote 0
Khi nhiều theo dãy ta làm như sau

PHP:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Chr(KeyAscii) Like "[!a-z]" And Chr(KeyAscii) Like "[!A-Z]" Then KeyAscii = 0
End Sub
'------------------------------------------------------------------------
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Chr(KeyAscii) Like "[!0-9]" Then KeyAscii = 0
End Sub
Như thế này Box1 chỉ nhập ký tư (In và thường), Box2 chỉ nhập số
Nếu chỉ 1 số ký tự bất thường ta gõ tất cả mã các ký tự thành chuôi 3 rồi dùng hàm Instr hay Sereach để kiểm tra nếu lớn hơn 0 là OK
Mình tham gia ý tưởng bạn vọc thêm nha
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom