Tìm Kiếm Trong Data Validation Excel

Liên hệ QC

Kiều Mạnh

I don't program, I beat code into submission!!!
Tham gia
9/6/12
Bài viết
5,421
Được thích
4,032
Giới tính
Nam
Mình có viết code sau để tạo và sử dụng Data Validation trong Excel sử dụng tốt ...Tuy nhiên có 2 vấn đề phát sinh mà suy nghĩ hoài chua tìm ra cách xử lý ... Vậy úp bài nhờ các Bạn trợ giúp

1/ Vùng dữ liêu nguon() luôn luôn phát sinh nên mình sử dụng Dic để lấy duy nhất gán vào Data Validation ...nếu dữ liệu nhiều phải kéo xuống tìm mất công quá ... Vậy mình muốn hỏi có cách nào từ Sheet2.[C4] ta có thể gõ ký tự đại diện là nó tìm kiếm ra được hay không ?? .... để gán vào đó

2/ Khi mình sử dụng SendKeys ("%{Down}") để cho Data Validation nó xổ xuống cho dễ nhìn thì trên máy mình mất phím Numlock và có sử dụng Shell để bật nó lại tuy nhiên thấy nó cũng cứ nhảy link tinh à

Vậy nhờ các Bạn xem có cách nào khác xử lý tốt 2 vấn đề trên không giúp mình với
Xin cảm ơn
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Nguon()
    Nguon = Sheet1.Range(Sheet1.[B3], Sheet1.[B65536].End(3)).Value
    Call Validation(Nguon, Sheet2.Range("C4"))
    ''Call ON_Numlock
End Sub

Public Sub Validation(ByVal dArr As Variant, ByVal Target As Range)
    Dim i As Long
    With CreateObject("scripting.dictionary")
        For i = 1 To UBound(dArr)
            If Not IsEmpty(dArr(i, 1)) Then
                .Item(dArr(i, 1)) = .Count
            End If
        Next
        Target.Validation.Delete
        If .Count Then Target.Validation.Add 3, , , Join(.Keys, ",")
        ''SendKeys ("%{Down}")
    End With
End Sub

Sub ON_Numlock()
    CreateObject("WScript.Shell").SendKeys "{NUMLOCK}", True
End Sub
 

File đính kèm

  • Data Validation.xlsb
    17.3 KB · Đọc: 61
Lần chỉnh sửa cuối:
miềng ko phải Tân ^^
http://www.mediafire.com/file/v8udshcb2mjx6od/Data+Validation+2.xlsb
nhập = bàn phím , ko dùng chuột !
thank you !
Mạnh mới đến xài tới 7 vòng For .... và tại sao ta ....

1/ Không sử dụng Data Datavaliton thật mà phải xài Data Datavaliton giả ....
2/ Nếu code đó điều chỉnh lại áp dụng cho Data Datavaliton thật .... thì điều gì sẻ xảy ra ...??!!!
3/ Mạnh thấy chèn 1 cái Controls làm giả Data Datavalition đó là gì ...phải check thêm cái gì mới thấy nó .... Máy Mạnh tìm hoài không thấy
4/ Phải chăng sử dụng Data Datavaliton thật cho bài này là vấn đề khó ....???!!!
....................
Với yêu cầu bài 1 làm ra được như vậy là quá tốt ...........Thuật toán hay ..........
Nhưng Mạnh vẫn nêu ra mấy vấn đề trên để mở rộng đường ta nghiên cứu tiếp .........
Làm 1 cái Data Datavaltion thật xem tình hình sao ... hay viết 1 hàm bao quát nhất xử lý được 2 vấn đề bài 1

Nghiên cứu thêm thôi mà .............Nhức đầu quá :D
Xin cảm ơn
 
Lần chỉnh sửa cuối:
Upvote 0
dùng công thức để filter Validation chỉ dùng cho người bình thường. Khổ cái ở đây toàn dân quậy, thích bắt sự kiện key_press khi đang gõ chữ lên ô biết sao giờ.
Nhưng mà tôi nói trước cho các dân quậy nha, đừng có dại mà đi theo đường Hook Keyboard bàn phím, đơn giản vì thông điệp bàn phím KHÔNG PHẢN ÁNH được nội dung trong ô .
Vậy có cách nào để bắt sự kiện khi gõ chữ trong cells ko anh. Hook thì được nhưng xử lý chuỗi sau khi enter thấy khó quá.
 
Upvote 0
Có chứ. mắt người nhìn thấy được thì code cũng lấy được. --=0--=0
Bạn AutoReply có thể vui lòng Code phần này, và nếu được thì chỉ cho mình thêm phần Hook để lấy mọi ký tự khi bàn phím được nhấn, không phân biệt nhấn trên ứng dụng nào, rất mong phản hồi từ bạn.
 
Upvote 0
Bạn AutoReply có thể vui lòng Code phần này, và nếu được thì chỉ cho mình thêm phần Hook để lấy mọi ký tự khi bàn phím được nhấn, không phân biệt nhấn trên ứng dụng nào, rất mong phản hồi từ bạn.

phần này là phần gì vậy bạn ?
Mình vô tình tìm thấy có đường dẫn này
http://www.giaiphapexcel.com/diendan/threads/xả-xì-chét.108295/page-4#post-692303
bạn xem thử "hắn" làm có giống với ý bạn chăng ? chi tiết thì mình không biết, tại đâu phải mình làm =))
Về việc Hook bàn phím bạn nên xem lại đường dẫn của MS
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
chú ý họ viết về tham số thứ 3, 4 , xem làm thế nào để thực hiện Hook trên toàn bộ các Process. Mình dốt lắm không có hiểu được nhiều đâu bạn ơi. Chớ nên xem trọng mình +-+-+-++-+-+-+
 
Upvote 0
phần này là phần gì vậy bạn ?
Mình vô tình tìm thấy có đường dẫn này
http://www.giaiphapexcel.com/diendan/threads/xả-xì-chét.108295/page-4#post-692303
bạn xem thử "hắn" làm có giống với ý bạn chăng ? chi tiết thì mình không biết, tại đâu phải mình làm =))
Về việc Hook bàn phím bạn nên xem lại đường dẫn của MS
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
chú ý họ viết về tham số thứ 3, 4 , xem làm thế nào để thực hiện Hook trên toàn bộ các Process. Mình dốt lắm không có hiểu được nhiều đâu bạn ơi. Chớ nên xem trọng mình +-+-+-++-+-+-+
ơ, vậy bác không phải chim hồng à. chắc cái đó đúng ý rồi đấy bác. có thể thì cho em xin code phần đó với, như trong video ấy
 
Lần chỉnh sửa cuối:
Upvote 0
Mạnh mới đến xài tới 7 vòng For .... và tại sao ta ....

1/ Không sử dụng Data Datavaliton thật mà phải xài Data Datavaliton giả ....
2/ Nếu code đó điều chỉnh lại áp dụng cho Data Datavaliton thật .... thì điều gì sẻ xảy ra ...??!!!
3/ Mạnh thấy chèn 1 cái Controls làm giả Data Datavalition đó là gì ...phải check thêm cái gì mới thấy nó .... Máy Mạnh tìm hoài không thấy
4/ Phải chăng sử dụng Data Datavaliton thật cho bài này là vấn đề khó ....???!!!
....................
Với yêu cầu bài 1 làm ra được như vậy là quá tốt ...........Thuật toán hay ..........
Nhưng Mạnh vẫn nêu ra mấy vấn đề trên để mở rộng đường ta nghiên cứu tiếp .........
Làm 1 cái Data Datavaltion thật xem tình hình sao ... hay viết 1 hàm bao quát nhất xử lý được 2 vấn đề bài 1

Nghiên cứu thêm thôi mà .............Nhức đầu quá :D
Xin cảm ơn

1/ là vì mình chỉ biết cách dùng Data Datavaliton sơ sơ à , nói chung nó là công cụ chuẩn của nhà phát triển thì mình chỉ có thể sử dụng đc các tính năng nó hỗ trợ thôi , khi sử dụng Data Datavaliton , mình xét các các tính năng như cho phép thêm danh sách chọn , cho phép enter , nhập các kiểu , ..v.v..v và ..v..v.. , nếu phù hợp mình sẽ chọn nó , mà nghĩ cho cùng Data Datavaliton cũng chỉ là danh sách đổ xuống thôi mà có nhiều cách để giải quyết ^^
2/ nếu sửa lại cho Data Datavaliton thì làm sao khi gõ vào ký tự đại diện vào ô C4 nó cho phép gọi 1 sự kiện nào đó , đàng này nếu ô C4 set Data Datavaliton thì nó khóa lại , ko cho bạn nhảy qua ô khác khi nhập sai , và báo lỗi Data ko có trong danh sách gì đó , vậy thì ko chèn code vào đc , nếu dùng bắt sự kiện bàn phím thì lại ko phân biệt đc chữ tiếng Việt , mà đc thì cũng lắm công phu @@ !
3 / cái control mình dùng là List box , Excel 2010 bạn vào Developer -> Design Mode là thấy nó , còn muốn add thì Developer ->Insert -> ( Activex Control ) -> chọn List box
4 / nói chung Data Datavaliton khó hay ko thì chắc là do cảm tính thôi , vì nó hỗ trợ chỉ đến thế thì chỉ dùng đc như thế , nếu rảnh thì nghiên cứu chơi cũng đc , còn để áp dụng công việc nếu ko rành sẽ làm tăng chí phí về ( thời gian + bảo dưỡng ) , mình chỉ thấy cái nào dễ sử dụng , và biết sử dụng thì mình làm thôi ,

có 2 thuật toán mình sử dụng trong đó là sort và Group , để xử lý ra dữ liệu mong muốn , còn nạp nó vào Data Datavaliton thế nào thì mình chịu thôi , hoặc nạp đc nhưng phải thêm vài thao tác !
 
Upvote 0
Bạn AutoReply có thể vui lòng Code phần này, và nếu được thì chỉ cho mình thêm phần Hook để lấy mọi ký tự khi bàn phím được nhấn, không phân biệt nhấn trên ứng dụng nào, rất mong phản hồi từ bạn.
Cứ yên tâm đi cái này sư phụ Mạnh mà ra tay thì nó là chuyên nhỏ như con

1/ là vì mình chỉ biết cách dùng Data Datavaliton sơ sơ à , nói chung nó là công cụ chuẩn của nhà phát triển thì mình chỉ có thể sử dụng đc các tính năng nó hỗ trợ thôi , khi sử dụng Data Datavaliton , mình xét các các tính năng như cho phép thêm danh sách chọn , cho phép enter , nhập các kiểu , ..v.v..v và ..v..v.. , nếu phù hợp mình sẽ chọn nó , mà nghĩ cho cùng Data Datavaliton cũng chỉ là danh sách đổ xuống thôi mà có nhiều cách để giải quyết ^^
2/ nếu sửa lại cho Data Datavaliton thì làm sao khi gõ vào ký tự đại diện vào ô C4 nó cho phép gọi 1 sự kiện nào đó , đàng này nếu ô C4 set Data Datavaliton thì nó khóa lại , ko cho bạn nhảy qua ô khác khi nhập sai , và báo lỗi Data ko có trong danh sách gì đó , vậy thì ko chèn code vào đc , nếu dùng bắt sự kiện bàn phím thì lại ko phân biệt đc chữ tiếng Việt , mà đc thì cũng lắm công phu @@ !
3 / cái control mình dùng là List box , Excel 2010 bạn vào Developer -> Design Mode là thấy nó , còn muốn add thì Developer ->Insert -> ( Activex Control ) -> chọn List box
4 / nói chung Data Datavaliton khó hay ko thì chắc là do cảm tính thôi , vì nó hỗ trợ chỉ đến thế thì chỉ dùng đc như thế , nếu rảnh thì nghiên cứu chơi cũng đc , còn để áp dụng công việc nếu ko rành sẽ làm tăng chí phí về ( thời gian + bảo dưỡng ) , mình chỉ thấy cái nào dễ sử dụng , và biết sử dụng thì mình làm thôi ,

có 2 thuật toán mình sử dụng trong đó là sort và Group , để xử lý ra dữ liệu mong muốn , còn nạp nó vào Data Datavaliton thế nào thì mình chịu thôi , hoặc nạp đc nhưng phải thêm vài thao tác !
Câu 2 ý Bạn là xử lý lỗi khi gõ ký tự không có trong Data Datavaliton thì nó báo lỗi như hình đúng không ....Nếu muốn gõ link tinh vào đó mà nó không báo lỗi thì đơn giản lắm mấy từ là xong ...Capture.PNG
 
Upvote 0
Nếu sử dụng hook bàn phím thì chữ tiếng anh thì được nhưng còn chữ tiếng việt vì có sử dụng bộ gõ unikey nên không hiện thi được tiếng việt nữa.
 
Upvote 0
phần này là phần gì vậy bạn ?
Mình vô tình tìm thấy có đường dẫn này
http://www.giaiphapexcel.com/diendan/threads/xả-xì-chét.108295/page-4#post-692303
bạn xem thử "hắn" làm có giống với ý bạn chăng ? chi tiết thì mình không biết, tại đâu phải mình làm =))
Về việc Hook bàn phím bạn nên xem lại đường dẫn của MS
https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
chú ý họ viết về tham số thứ 3, 4 , xem làm thế nào để thực hiện Hook trên toàn bộ các Process. Mình dốt lắm không có hiểu được nhiều đâu bạn ơi. Chớ nên xem trọng mình +-+-+-++-+-+-+
Chào bạn,

Qua bài của bạn mình mới biết bạn "Chim Hồng" là "zai" - (hắn, gái chắc dùng ả :) )

Cũng qua bài này giúp mình mở mang thêm nhưng thêm bài #29 nữa thì mình cũng tò mò về các phương án có thể thi triển +-+-+-+. Rất mong bạn AutoReply code cho mình và mọi người tham khảo.
 
Upvote 0
Chào bạn,

Qua bài của bạn mình mới biết bạn "Chim Hồng" là "zai" - (hắn, gái chắc dùng ả :) )

Cũng qua bài này giúp mình mở mang thêm nhưng thêm bài #29 nữa thì mình cũng tò mò về các phương án có thể thi triển +-+-+-+. Rất mong bạn AutoReply code cho mình và mọi người tham khảo.

ở trên có ghi rồi mà bạn
chi tiết thì mình không biết, tại đâu phải mình làm =))
mình thấy có video đó làm được nên mình nghĩ là được thôi chứ có biết code gì đâu bạn. Chắc có hiểu lầm gì ở đây rồi chăng. +-+-+-++-+-+-+
 
Upvote 0
ở trên có ghi rồi mà bạn

mình thấy có video đó làm được nên mình nghĩ là được thôi chứ có biết code gì đâu bạn. Chắc có hiểu lầm gì ở đây rồi chăng. +-+-+-++-+-+-+
Video điền vào Form ở chế độ Showmodal = False thì ngay code mình up cũng đã làm được. Vấn đề mình đang đưa ra là điền dữ liệu vào Cell.

Bạn AutoReply vừa giỏi (mình đã xem nhiều bài của bạn) vừa khiêm tốn mình còn phải học tập nhiều.
 
Upvote 0
Vấn đề mình đang đưa ra là điền dữ liệu vào Cell.
có nghĩa là vừa điền vào cell thì dữ liệu trên cell đó hiện lên form luôn sao bác. em cũng đang tò mò cái này. có code thực hiện vụ này được chắc đã lắm (phát triển thêm được vài tiện ích có sẵn trên diễn đàn được, làm vài cái mã mở cho dân tình thế thái học hỏi cũng được).
thấy vụ này addins A tools làm được sao không hỏi luôn tác giả nhỉ, bác chim hồng thấy lâu quá không onl ( thế mà trước giờ cứ nghĩ AutoReply là nick khác của bác ấy- toàn cao thủ ẩn dật) chắc không hỏi được.
còn code hook sự kiện đó thì em nghĩ không giống trong video của bác chim hồng và addins A tools, vì cả 2 khi nhấn đều còn thấy được địa chỉ ô, trong khi đó code ở #1 thì không thấy được địa chỉ ô.
 
Lần chỉnh sửa cuối:
Upvote 0
có nghĩa là vừa điền vào cell thì dữ liệu trên cell đó hiện lên form luôn sao bác. em cũng đang tò mò cái này. có code thực hiện vụ này được chắc đã lắm (phát triển thêm được vài tiện ích có sẵn trên diễn đàn được, làm vài cái mã mở cho dân tình thế thái học hỏi cũng được).
thấy vụ này addins A tools làm được sao không hỏi luôn tác giả nhỉ, bác chim hồng thấy lâu quá không onl ( thế mà trước giờ cứ nghĩ AutoReply là nick khác của bác ấy- toàn cao thủ ẩn dật) chắc không hỏi được.
còn code hook sự kiện đó thì em nghĩ không giống trong video của bác chim hồng và addins A tools, vì cả 2 khi nhấn đều còn thấy được địa chỉ ô, trong khi đó code ở #1 thì không thấy được địa chỉ ô.
Bạn mới học VBA thì cứ từ từ mà tìm hiểu. Bạn biết đọc Code, biết áp dụng Code rồi thì cứ theo Code tôi up mà triển, nếu chưa biết thì mò tiếp như tôi, cứ thử, không được thử tiếp chứ có hiểu ý nghĩa mô tê gì đâu :) .


Addin Atool bạn thích thì bạn hãy liên hệ với tác giả vì đó là sản phẩm thương mại và cũng không nằm trong vấn đề đang thảo luận.
 
Upvote 0
có nghĩa là vừa điền vào cell thì dữ liệu trên cell đó hiện lên form luôn sao bác. em cũng đang tò mò cái này. có code thực hiện vụ này được chắc đã lắm (phát triển thêm được vài tiện ích có sẵn trên diễn đàn được, làm vài cái mã mở cho dân tình thế thái học hỏi cũng được).
thấy vụ này addins A tools làm được sao không hỏi luôn tác giả nhỉ, bác chim hồng thấy lâu quá không onl ( thế mà trước giờ cứ nghĩ AutoReply là nick khác của bác ấy- toàn cao thủ ẩn dật) chắc không hỏi được.
còn code hook sự kiện đó thì em nghĩ không giống trong video của bác chim hồng và addins A tools, vì cả 2 khi nhấn đều còn thấy được địa chỉ ô, trong khi đó code ở #1 thì không thấy được địa chỉ ô.
Phần mền A Tool làm được như vậy cũng phải dùng kỹ thuật hook keyboard và bẫy các sự kiện....để sử lý thông tin nhập vào và đưa lại vào cell.
 
Upvote 0
Mạnh mới nghĩ ra 1 giải pháp đơn giản vầy ... Nhờ các bạn Tham gia thêm
1/ Tại C4 ta gõ chữ m xong Enter ...xong ta chọn Biểu tượng Data nó xổ ra cái cần lọc ...
Tương Tự như vây ... Gõ chữ đ vv...

2/ Còn rắc rối lắm ........ là phải thực hiện tới 3 thao tác mới cho ra kết quả

3/ Chưa xử lý được SendKeys

Mong các bạn tham gia thêm
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim Nguon()
    Nguon = Sheet1.Range(Sheet1.[B3], Sheet1.[B65536].End(3)).Value
    If Target.Address = [C4].Address Then
        Call GetListValidation(Nguon(), Sheet2.Range("C4"))
    End If
End Sub

Public Sub GetListValidation(ByVal Arr As Variant, ByVal Target As Range)
    Dim Dic As Object, dk As String, i As Long
    Set Dic = CreateObject("scripting.dictionary")
    dk = Sheet2.Range("C4").Value
    For i = 1 To UBound(Arr)
        If InStr(1, Arr(i, 1), dk) Then
            If Not IsEmpty(Arr(i, 1)) Then
                Dic.Item(Arr(i, 1)) = Dic.Count
            End If
        End If
    Next
    With Target.Validation
        .Delete
        If Dic.Count Then
            .Add 3, , , Join(Dic.Keys, ",")
            ''SendKeys ("%{Down}") ', True
            .ShowError = False
        End If
    End With
End Sub
 

File đính kèm

  • Data Validation.xlsb
    17.1 KB · Đọc: 19
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom