Cách tạo ô hiện hành thành dạng combo box hiển thị 2 cột

Liên hệ QC

jibelonline

Thành viên mới
Tham gia
25/3/07
Bài viết
15
Được thích
0
Chào cả nhà, mình đã tạo được ô hiện hành dạng combo box (dùng Validation) để chọn "mã hàng", nhưng có cách nào cho hiển thị thêm 1 cột "tên hàng" nữa để dễ lựa chọn khi chọn mã. Cảm ơn nhiều
 
Chào cả nhà, mình đã tạo được ô hiện hành dạng combo box (dùng Validation) để chọn "mã hàng", nhưng có cách nào cho hiển thị thêm 1 cột "tên hàng" nữa để dễ lựa chọn khi chọn mã. Cảm ơn nhiều
Validation chỉ có 1 cột thôi bạn à, muốn cho nó theo ý bạn thì nên dùng combobox

Tải file của anh Mr Okebab nhé
 

File đính kèm

  • Combobox.xls
    55.5 KB · Đọc: 392
Chỉnh sửa lần cuối bởi điều hành viên:
Trong file của Dom nên thêm code:
Mã:
Private Sub CBViDu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(, 2).Select
End If
End Sub
Như vậy, sau khi enter chọn nó sẽ chuyển sang ô tiếp theo chứ không phải dùng chuột nữa. Tùy theo file của bạn mà chon ô tiếp theo cho phù hợp.
 
Lần chỉnh sửa cuối:
Trong file của Dom nên thêm code:
Mã:
Private Sub CBViDu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(, 2).Select
End If
End Sub
Như vậy, sau khi enter chọn nó sẽ chuyển sang ô tiếp theo chứ không phải dùng chuột nữa. Tùy theo file của bạn mà chon ô tiếp theo cho phù hợp.
Phải chi nó có thủ tục AfterUpdate thì hay biết mấy phải không anh
 
Bác Sealand ơi, nhờ Bác chỉ dẫn thêm với.
Tôi đang tìm cách vận dụng chiêu thức KeyDown của Bác, nhưng gặp một trục trặc.
Tôi muốn sau khi nhấn phím Enter thì sẽ chọn ô tiếp theo trong cùng một cột. Tôi đã sử dụng mã như sau, nhưng nó lại nhảy cách dòng, chú không như ý muốn.
PHP:
Private Sub CBViDu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
ActiveCell.Offset(1).Select
End If
End Sub

Mong được chỉ giáo thêm.
Trân trọng.
 

File đính kèm

  • ComboboxInActiveCell01.xls
    57 KB · Đọc: 114
Bạn sai 1 chút:
Cú pháp: ActiveCell.Offset(dong,cot).Select
Lệnh này di chuyển cùng dòng có thể bỏ qua số dòng mà chỉ ghi số cột(Nhưng phải ghi dấu phảy):
Ví dụ: ActiveCell.Offset(,1).Select
Lệnh này di chuyển cùng cột có thể bỏ qua số cột mà chỉ ghi số dòng(Không phải ghi dấu phảy):
Ví dụ: ActiveCell.Offset(1).Select

Vậy là bạn nhầm sang chuyển dòng chứ không phải là chuyển cột (Thiếu dấy phảy)
 
Lần chỉnh sửa cuối:
Gủi Bác Seanland,
Cám ơn bạn đã trả lòi.
Đúng là mình đang muốn chuyển sang ô cùng cột ở dòng tiếp theo đới với các ô có linked tới CB, nên mình mới dùng .offset(1). Chỉ thay đổi chỉ số dòng chứ không thay đổi chỉ số cột. Nhưng kết quả không như ý muốn. BẠn giúp mình với.
Mình đã thử với cách vào Tool->Option->Edit->Move selection after Enter, thì có vẻ nhu đạt được kết quả. (điều này đồng nghĩa với việc application.moveaftereturn=false). Nhưng mình không biết phải đặt đoạn code này vào đâu để khi mình nhập liệu vào các ô không có linked tới CB, sau khi nhấn Enter vẫn nhảy sang ô tiếp theo cùng cột.

Mong nhận được hồi âm.
Trân trọng.
 
Lần chỉnh sửa cuối:
Xin lỗi, giờ mới hiểu ý bạn.Giờ ta phân tích sự kiện nhấn phím Enter nhé
1/Kiểm tra đúng phím có Keycode=13-->Xuống dòng.
2/Thực hiện phím Enter-->Sang phải
Vậy là ta sẽ chuyển sang ô phía dưới bên phải 1 ô

Giờ thì bạn chỉ muốn chủ động xuống dưới 1 ô phải bỏ tác động phím enter đi bằng cách thiết lập keycode=0
Bạn sửa như sau (Chú ý dòng lệnh thứ 3):

Mã:
Private Sub CBViDu_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
KeyCode = 0
ActiveCell.Offset(1).Select
End If
End Sub
 
Đúng ý mình rồi.
Cám ơn bạn Sealand đã giúp đỡ.
Bây giờ mình mới hiểu sự kiện KeyDown sẽ ktra phím được gõ thông qua biến KeyCode, và ứng dụng sẽ được "xử lý" tùy theo giá trị của Keycode.
Ở tình huống Keycode =13, tương đương với việc gõ phím Enter, ứng dụng sẽ xử lý di chuyển đến ô tiếp theo như đã được xác lập trong Tool->Option->Edit->Move After Enter Selection.
Việc gán giá trị 0 cho Keycode, sẽ tương đương với việc điều khiển tác động của phím Enter theo ý ta, thay vì để ứng dụng chạy theo xác lập trong Tool...
Mình diễn giải như vậy không biết có đúng không?
Rất cám ơn bạn đã chỉ giúp.
Trân trọng.
 
Gủi Bạn Sealand,
Nhờ bạn giúp mình với
Cùng một ý đồ như #9, mình muốn rằng thay vì nhấn phím ENTER, khi người dùng kích chuột trên CB thì cũng đươc kết quả tương tự.
Mình đã thử với sự kiện CB_Click(), nhưng khi chạy thử thì nhận thông báo lỗi, Excel phải khởi động lại. Không hiểu lý do vì sao.
Mong bạn chỉ dẫn thêm.
Trân trọng.
 
Với click thì chỉ cần

PHP:
Private Sub CBViDu_Click()
ActiveCell.Offset(1).Select
End Sub
 
Gủi Bạn Seanland,
Mình làm theo cách của bạn, nhưng vẫn không được.
Mình gửi file nhờ bạn ktra giúp với.
Trân trọng.
 
Lần chỉnh sửa cuối:
Code bạn viết rối quá, thực sự mình chưa tìm ra lỗi của code nằm ở đoạn nào.
 
Tự động chuyển sang ô khác theo ý muốn, sau khi kích chuột hoặc nhấn Enter trên CB

Gủi bạn Sealand,
Rất cám ơn bạn đã hồi âm.
Code bạn viết rối quá
Có lẽ vì mình là dân nghiệp dư, nên cách trình bày code không được rõ ràng.
Tuy nhiên, ngay cả khi mình thử lại với file của bạn (có đính kèm trong bài này) thì gặp 2 vấn đề sau:
1. Khi ta chọn một ô nằm giữa vùng dữ liệu, ví dụ là ô A20, thì CB vẫn hiện ra bình thường, nhưng sau khi Click chuột thì CB sẽ nhảy cách một dòng (Trong khi mình muốn sau khi Click, CB xuất hiện ở dòng tiếp theo trong cùng cột).
2. Sau khi thêm thủ tục CB_click() như bạn hướng dẫn, nếu không dùng chuột mà dùng phím mũii tên di chuyển lên xuống trong CB , thì CB lập tức di chuyển sang ô khác, trong khi ta chưa kịp làm gì.

Bạn hướng dẫn thêm giúp mình nhé.
Trân trọng.
 

File đính kèm

  • ComboboxInActiveCell02.xls
    73 KB · Đọc: 78
Lần chỉnh sửa cuối:
Mong các cao thủ quan tâm gỡ rối giúp mình với.
Trân trọng
 
Nâng cấp ứng dụng

Sealand ơi , việc tạo hộp thoại dạng danh sách lựa chọn (có nhiều cột) rất thực tế và rất hay . Ở trường hợp này nếu dữ liệu trong danh sách quá dài thì ta có cách nào lọc lại DS hiển thị bằng cách đánh vào ô và combobox lọc rồi hiển thị (cái này giống hộp thoại tìm kiếm của google ấy )
Mong nhận được sự giúp đỡ ,xin cám ơn+-+-+-++-+-+-++-+-+-+
 
Theo mình chỉ cần thêm thanh trượt nếu danh sách dài. và gõ chữ cái đầu, nó sẽ nhảy đến vùng danh sách chứa các chữ cái đầu đấy.
 
Web KT

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

Back
Top Bottom