Validation chỉ cho nhập chữ cái

Liên hệ QC

nguoirung1234

Thành viên mới
Tham gia
12/3/07
Bài viết
45
Được thích
12
Xin các anh chị giúp em các vấn đề sau :

  1. Làm sao để tạo ra Validation chỉ cho nhập chữ cái vào ô. Nếu dùng hàm tự tạo thì dễ rồi, nhưng có thể chỉ dùng các hàm của Excel được không?
  2. Làm sao lấy được ký tự ở vùng phím số trong thủ tục Keydown của Control. Em dùng hàm Chr và ChrW đều không được. Nó chỉ cho ra các chữ cái a, b,...
 

File đính kèm

Xin các anh chị giúp em các vấn đề sau :
1. Làm sao để tạo ra Validation chỉ cho nhập chữ cái vào ô. Nếu dùng hàm tự tạo thì dễ rồi, nhưng có thể chỉ dùng các hàm của Excel được không?

Bạn chọn vùng dữ liệu rồi làm theo hình, ở đây mình chọn vùng H10:H20, nếu chỉ cho phép người dùng nhập vào 1 ký tự thì công thức như hình bên dưới.

attachment.php


Nếu cho phép nhập vào ô chuỗi nhiều ký tự thì thay công thức trên bằng =ISTEXT(H10)
 

File đính kèm

  • 2.jpg
    2.jpg
    79 KB · Đọc: 124
Lần chỉnh sửa cuối:
Cái này người ta gõ số dạng text cũng bó tay ('1). Mà tác giả đâu có nói là chỉ nhập 1 ký tự.

Nếu mà người dùng cố ý nhập cho sai đi thì cũng khó có cách gì hoàn hảo, dùng code vậy nếu người ta không gõ số vào mà copy 1 số rồi thả vào vùng đó thì cũng bó chân.
 
Mình hiểu là bạn ấy chỉ muốn nhập 1 chữ cái vào ô, còn nếu muốn nhiều chữ thì bỏ đi phần LEN(..) thôi mà
-->=ISTEXT(H10)
Bạn thử công thức này sẽ biết cách làm của bạn có được không:
Mã:
=ISTEXT("gea123")
 
Bạn thử công thức này sẽ biết cách làm của bạn có được không:
Mã:
=ISTEXT("gea123")

Cách mình làm chỉ đơn giản là không cho nhập 1 con số vào ô, còn nhập số trong chuỗi như vậy thì mình chịu, nếu có thể mong bạn dùng code giải quyết cho triệt để luôn đi, vì thường những số đơn giản người ta mới tự tay gõ vào, còn với số dài thì copy rồi paste vào, hoặc kéo fill qua vùng có validation thì cũng không cấm được.
 
Cách mình làm chỉ đơn giản là không cho nhập 1 con số vào ô, còn nhập số trong chuỗi như vậy thì mình chịu, nếu có thể mong bạn dùng code giải quyết cho triệt để luôn đi, vì thường những số đơn giản người ta mới tự tay gõ vào, còn với số dài thì copy rồi paste vào, hoặc kéo fill qua vùng có validation thì cũng không cấm được.
Nếu như bạn muốn code thì đây. Cũng đơn giản thôi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim GPE As Boolean
For Each cll In Target
For i = 1 To Len(cll)
    If UCase(Mid(cll, i, 1)) Like "[!A-Z]" Then
    GPE = True
    cll.ClearContents
    End If
Next
Next
If GPE = True Then
MsgBox "Chi duoc nhap chu cai"
Target.Select
End If
End Sub
 
Nếu như bạn muốn code thì đây. Cũng đơn giản thôi.
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim GPE As Boolean
For Each cll In Target
For i = 1 To Len(cll)
    If UCase(Mid(cll, i, 1)) Like "[!A-Z]" Then
    GPE = True
    cll.ClearContents
    End If
Next
Next
If GPE = True Then
MsgBox "Chi duoc nhap chu cai"
Target.Select
End If
End Sub
1> Nếu phát hiện nhập liệu sai thì thoát vòng lập và hiện ngay thông báo để tiết kiệm tài nguyên ---> Người ta copy paste hàng ngàn cell mà bạn For tất tần tật thì đến bao giờ
2> Dùng Worksheet_change thì bắt buộc phải có vùng điều kiện nhập ---> Toàn bảng tính đều có tác dụng với code thì.. chết
3> Khai báo biến rõ ràng ---> Tránh tình trạng người khác copy code về máy lại không chạy được
Đây là những bài học cơ bản nhất mà bác SA_DQ đã dạy đấy (không phải do tôi chế)
 
1> Nếu phát hiện nhập liệu sai thì thoát vòng lập và hiện ngay thông báo để tiết kiệm tài nguyên ---> Người ta copy paste hàng ngàn cell mà bạn For tất tần tật thì đến bao giờ
2> Dùng Worksheet_change thì bắt buộc phải có vùng điều kiện nhập ---> Toàn bảng tính đều có tác dụng với code thì.. chết
3> Khai báo biến rõ ràng ---> Tránh tình trạng người khác copy code về máy lại không chạy được
Đây là những bài học cơ bản nhất mà bác SA_DQ đã dạy đấy (không phải do tôi chế)
1. Cái tôi muốn ở đây là những cell nào không sai thì vẫn được chấp nhận cho nhập vào. Ở đây yêu cầu chỉ chung chung. Mỗi người mỗi ý.
2. Yêu cầu chung, không phục vụ cho dữ liệu cụ thể nào hết --> Code viết chỉ để tham khảo, việc giới hạn không cần thiết. Nếu giới hạn bạn sẽ giới hạn cho vùng nào? Lý do?
3. Cũng vì viết để tham khảo nên tôi không quan trọng chuyện này. Cái quan trọng là thuật toán. Còn ai muốn dùng sẽ phải tự biết điều chỉnh cho phù hợp với dữ liệu và nhu cầu sử dụng của mình.
 
1. Cái tôi muốn ở đây là những cell nào không sai thì vẫn được chấp nhận cho nhập vào. Ở đây yêu cầu chỉ chung chung. Mỗi người mỗi ý.
2. Yêu cầu chung, không phục vụ cho dữ liệu cụ thể nào hết --> Code viết chỉ để tham khảo, việc giới hạn không cần thiết. Nếu giới hạn bạn sẽ giới hạn cho vùng nào? Lý do?
3. Cũng vì viết để tham khảo nên tôi không quan trọng chuyện này. Cái quan trọng là thuật toán. Còn ai muốn dùng sẽ phải tự biết điều chỉnh cho phù hợp với dữ liệu và nhu cầu sử dụng của mình.
Có lẽ bạn chưa hiểu ý tôi nói... Tôi đang gợi ý bạn ở chổ For i = 1 to Len(...)... ---> Gặp ký tự không hợp lệ thì bạn còn quét tiếp làm gì ---> Tôi nói đúng chứ
Xem lại đi
Ah... mà thôi... tùy bạn vậy! Có lẽ bạn thuộc tip người không thích bị góp ý cũng nên
Ẹc... Ẹc...
 
Em cám ơn các anh đã giúp đỡ. Còn câu 2 nữa, xin các anh chị giúp giùm.

Làm sao lấy được ký tự ở vùng phím số trong thủ tục Keydown của Control. Em dùng hàm Chr và ChrW đều không được. Nó chỉ cho ra các chữ cái a, b,...
 
Em cám ơn các anh đã giúp đỡ. Còn câu 2 nữa, xin các anh chị giúp giùm.
Nếu là trên Form thì việc lấy KeyAscii hoàn toàn không có vấn đề ---> Trên cell thì... chắc bó tay quá bạn ơi!
Xin hỏi: Mục đích chính của bạn là gì? Có thể trình bày, biết đâu mọi người có cách khác giúp bạn!
 
Có lẽ bạn chưa hiểu ý tôi nói... Tôi đang gợi ý bạn ở chổ For i = 1 to Len(...)... ---> Gặp ký tự không hợp lệ thì bạn còn quét tiếp làm gì ---> Tôi nói đúng chứ
Xem lại đi
Ah... mà thôi... tùy bạn vậy! Có lẽ bạn thuộc tip người không thích bị góp ý cũng nên
Ẹc... Ẹc...
Chúng ta tham gian diễn đàn, việc tranh luận và góp ý là chuyện bình thường và đó là điều tốt. Không có gì làm tôi không thích cả. Nhưng tôi sẽ phản biện nếu như tôi thấy tôi đúng. Điều đó cũng chẳng có gì sai.
Ghi nhận ý kiến của bạn về vòng lặp duyệt qua các ký tự trong chuỗi. Lẽ ra phải Exit sub khi gặp ký tự không hợp lệ.
 
Hic, toàn là dân pro excell không,
tôi cũng mới phát hiện ra cai marco này, viết lỏm tỏm vài code,
thấy cũng hay,
sau này từ từ nâng cấp lên cho bằng mọi người vậy.

Tambiet
 
Xin hỏi: Mục đích chính của bạn là gì? Có thể trình bày, biết đâu mọi người có cách khác giúp bạn!

Em làm 1 form, trong đó có 1 MSFlexGrid. Khi chọn 1 ô trong MSFlexGrid và gõ các phím số từ 1-9 thì hiện số đó, gõ số 0 hay delete thì xóa ô. Với các phím số hàng ngang thì bình thường, còn các phím số bên phải thì không cho ra số mà là các chữ cái.

Mã:
Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
    Select Case KeyCode
        Case vbKeyDelete, vbKey0, vbKeyNumpad0
            MSFlexGrid1.Text = ""
        Case vbKey1 To vbKey9, vbKeyNumpad1 To vbKeyNumpad9
            MSFlexGrid1.Text = ChrW(KeyCode)
    End Select
End Sub
 
Em làm 1 form, trong đó có 1 MSFlexGrid. Khi chọn 1 ô trong MSFlexGrid và gõ các phím số từ 1-9 thì hiện số đó, gõ số 0 hay delete thì xóa ô. Với các phím số hàng ngang thì bình thường, còn các phím số bên phải thì không cho ra số mà là các chữ cái.

Mã:
Private Sub MSFlexGrid1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
    Select Case KeyCode
        Case vbKeyDelete, vbKey0, vbKeyNumpad0
            MSFlexGrid1.Text = ""
        Case vbKey1 To vbKey9, vbKeyNumpad1 To vbKeyNumpad9
            MSFlexGrid1.Text = ChrW(KeyCode)
    End Select
End Sub
Có lẽ bạn nên đưa nguyên file lên thì hay hơn ---> Nhiều mấy tính chẳng có Control này, lấy đâu mà Test
 
Web KT

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

Back
Top Bottom