Validation_Ext - Trợ giúp nhập liệu! (3 người xem)

Liên hệ QC

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

Nguyễn Duy Tuân

Nghị Hách
Thành viên danh dự
Tham gia
13/6/06
Bài viết
4,814
Được thích
10,315
Giới tính
Nam
Nghề nghiệp
Giáo viên, CEO tại Bluesofts
Theo cách truyền thống để tạo ra một hộp nhập (Combo) tại ô chúng ta vào menu Data\Validation... tạo bằng thuộc tính List. Theo cách làm đó thì List chỉ cho ta một cột mà thôi.

Khi nhập mã chúng ta cần biêt tên (diễn giải) của mã là gì. Như vậy cần phải có ít nhất 2 cột trong List. Tôi gửi file ví dụ về cách làm các bạn tham khảo và tự phát triển thêm.
 

File đính kèm

Lần chỉnh sửa cuối:
phongvanvu đã viết:
Sao mình gõ một giá trị không có trong danh sách mà chẳng thấy báo lỗi gì cả???

Tôi đã nâng cấp thêm tính năng:
- Kiểm tra mã trong List (danh sách), nếu không có tự bật danh sách để tra tìm.
- Trong trường hợp không muốn nhập nữa nhấn phím ESC.

Các bạn có thể download lại, vẫn đường dẫn trên.
 
Nhân bản đối tượng

thai nguyen đã viết:
Toi da download file Validation_Ext cua ban Tuan toi thay rat hay, nhung toi dang muon tao them 1 cot ben canh cua cot "tieu muc" voi noi dung nhu cot "tieu muc" da tao. ban nao thanh thao ve van de nay thi giup toi voi.
vi muc dich cua toi la toi tao cot TK No Va TK co, va khi chon ma TK thi se hien luon ten TK la TK gi.
Cam on Ban Tuan va cac ban nhieu.neu tao duoc ban co the dua len Webketoan.com hoac giaiphapexcel.com

Theo phiên bản cũ, tôi để các lệnh ở dạng thủ tục. Nếu muốn sửa theo ý mình (thêm vùng Validation), người dùng phải nắm rõ về VBA và phải chỉnh sửa khá nhiều mà chưa chắc đã được như ý. Theo cách làm "thủ tục", khi muốn nhân bản đối tượng sẽ phải viết thêm code rất phức tạp.

Tôi xin đưa ra phiên bản mới cho phép nhân bản đối tượng, có nghĩa là người dùng có thể tạo thêm cho mình nhiều vùng Validation khác nhau trên workbook của mình. Phiên bản mới để thêm vùng Valiation người dùng chỉ cần thêm 3 dòng lệnh

Mã:
'Khai báo biến đối tượng
Private objVLD As CLS_Validation_Ext
    Set objVLD = New CLS_Validation_Ext 'Khởi tạo biến nhớ kiểu CLS_Validation_Ext
    objVLD.Create "Sheet tạo Validation", "Tên vùng dữ liệu", _
    "Vùng đặt Validation", ArrayValid 'Tạo vùng Validation
Validation_Ext.jpg

Các bạn có thể download lại theo đường link cũ.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Cảm ơn bác TuanVNUNI!

Nhưng sao em không sử dụng được nhỉ? Khi bấm vào Reset Validation nó báo: Compile error: Can not find project or library. EM phải làm sao?
 
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn đã chạy file "Setup Validation_Ext.bat" trong cùng một thư mục chưa? Control này không chạy trên Excel2000. Nếu bạn cần phiên bản cho Excel2000 toi sẽ gửi riêng cho bạn.
 
Validation_Ext2000 cho Excel2000.
 
Lần chỉnh sửa cuối:
Em dùng Excel 2003, đã chạy file "Setup Validation_Ext.bat" rồi nhưng không thấy thay đổi gì cả. Nó vẫn báo lỗi y như cũ bác ạ.
 
Bạn phải vào WINDOWS bằng user "Admin"?
 
Em hâm mộ cái Valid_Ext này quá nhưng nhiều chỗ trong Code không hiểu.
Mong bác ghi rõ dùm chú thích trong Code thì hay quá. Em cảm ơn!
 
bbc đã viết:
Em hâm mộ cái Valid_Ext này quá nhưng nhiều chỗ trong Code không hiểu.
Mong bác ghi rõ dùm chú thích trong Code thì hay quá. Em cảm ơn!

Có thể trình độ của mình chưa cao lắm, mình sẽ diễn giải cách làm của anh Tuân theo cách hiểu của mình. Hy vọng bạn sẽ hiểu nhiều hơn.

Thực ra đây là Combobox, nhưng ở đây ta chọn sự kiện là khi ta chọn 1 vùng nào đó thì CB này sẽ chạy đến ô ta chọn và nhận các giá trị nào đấy.

Cảm ơn Anh Tuân nhiều.

Thân!
 

File đính kèm

Dear all,
--------
Với các phiên bản trước Office 2007, một hạn chế khi chúng ta lợi dụng sự kiện Worksheet_SelectionChange là mất khả năng khôi phục hành động cập nhật trên Sheet. Để giải quyết vấn đề này phải có thủ tục xử lý.
Hi vọng đây cũng là một điểm chú ý trước khi bạn triển khai Validation theo hướng trên.
 
Mr Okebab đã viết:
Có thể trình độ của mình chưa cao lắm, mình sẽ diễn giải cách làm của anh Tuân theo cách hiểu của mình. Hy vọng bạn sẽ hiểu nhiều hơn.

Thực ra đây là Combobox, nhưng ở đây ta chọn sự kiện là khi ta chọn 1 vùng nào đó thì CB này sẽ chạy đến ô ta chọn và nhận các giá trị nào đấy.

Cảm ơn Anh Tuân nhiều.

Thân!

Dear All !!!
Để giảm thiểu khả năng lỗi xảy ra, các bạn nên cho dòng lệnh

.ListFillRange = "........"

lên trước dòng lệnh

.LinkedCell = ActiveCell.Address

Lý do là CB sẽ được gán List trước, như vậy nếu ô chuyển tới đã có giá trị (thuộc List đó ) thì sẽ không bị lỗi khi chuyển từ List này sang List khác

Thân!
 
Sau khi tôi copy file Validation_Ext.dll vào thư mục C:\Windows\System32
và chạy lệnh
Mã:
RegSvr32 Validation_Ext.dll /s

rồi bật dùng Excel 2003 mở file Validation_Ext.xls thì Excel bị lỗi và tự động thoát ra.

Các pro có giải pháp gì không ?
 
Theo lời đề nghị của các bạn, mình up file Combobox thay thế validation cho các bạn tham khảo. Mình đã chú thích trong từng dòng Code. Có gì không hiểu các bạn cứ đặt câu hỏi.

Thân!
 

File đính kèm

Mr Okebab xem vấn đề này rồi giải quyết nhé.
Vị trí của các combo không bám theo ActiveCell. Nếu con trỏ di chuyển từ các cột khác thì combo bám đúng ActiveCell, còn nếu di chuyển các dòng trên cùng một cột thì vị trí của combo bị sai.
 
Em cũng không hiểu tại sao nữa, Combobox thì chạy đúng ô đó nhưng cái List của nó lại ở đúng vị trí của ô chọn trước đó.
Nếu bỏ lệnh Sendkey đi thì không xảy ra vấn đề này, nhưng nếu không có lệnh này thì lại không hiện ra list được.

Mong anh chỉ giáo thêm.

Cảm ơn thật nhiều.

Thân!
 
Sau một hồi nghiên cứu, nay mình đã sửa lại File này , sửa được lỗi do anh TUANVNUNI nói.

Chân thành cảm ơn anh và ttphong2007

Thân!
 

File đính kèm

Mình thấy tốt rồi đấy! Bây giờ chỉnh lại code làm sao mà khi có một sheet mới, có các vùng cần làm Validation thì sửa lại code sao cho nhanh nhất.

Thêm chút yêu cầu Mr Okebab xem thế nào.

Hiện nay khi đặt con trỏ vào vùng validation thì tự động bật list chọn. Để đóng lại, người dùng phải dùng chuột nháy sang ô bên cạnh. Vậy để tăng sự tiện dụng, khi hiện List chọn, nhấn phím Tab-không chọn; Enter-chọn thì con trỏ nhảy sang cột bên cạnh (cùng dòng).

Có thể nghiên cứu, nếu người dùng không dùng chuột để chọn giá trị mà dùng bàn phím (các phím mũi tên để chọn, phím Enter để nhận).

Can thiệp vào bán phím, dùng thủ tục

Private Sub CBViDu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

'KeyCode:
'38 = Mui ten len tren
'40 = Mui ten xuong duoi
'37 = Mui ten sang trai
'39 = Mui ten sang phai
'9 = Phim Tab
'13 = Phim Enter
'27 = Phim ESC
 
TuanVNUNI đã viết:
Mình thấy tốt rồi đấy! Bây giờ chỉnh lại code làm sao mà khi có một sheet mới, có các vùng cần làm Validation thì sửa lại code sao cho nhanh nhất.

Thêm chút yêu cầu Mr Okebab xem thế nào.

Hiện nay khi đặt con trỏ vào vùng validation thì tự động bật list chọn. Để đóng lại, người dùng phải dùng chuột nháy sang ô bên cạnh. Vậy để tăng sự tiện dụng, khi hiện List chọn, nhấn phím Tab-không chọn; Enter-chọn thì con trỏ nhảy sang cột bên cạnh (cùng dòng).

Có thể nghiên cứu, nếu người dùng không dùng chuột để chọn giá trị mà dùng bàn phím (các phím mũi tên để chọn, phím Enter để nhận).

Can thiệp vào bán phím, dùng thủ tục

Private Sub CBViDu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

'KeyCode:
'38 = Mui ten len tren
'40 = Mui ten xuong duoi
'37 = Mui ten sang trai
'39 = Mui ten sang phai
'9 = Phim Tab
'13 = Phim Enter
'27 = Phim ESC

Cảm ơn bác nhiều.

Hy vọng cái này là được một phần. Nhờ chỉ giáo thêm.

Thân!
 

File đính kèm

Lại hỏi về Combobox

Cái combo Floating này rất được. Tuy nhiên nó làm mất tác dụng copy - paste trong bảng tính đó.
Các bác có cách nào sửa cái lỗi này không nhỉ?
 
Web KT

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

Back
Top Bottom