[Chia sẻ] File code VBA cho combobox nhập liệu, tùy biến để dễ dàng kết hợp vào file của bạn.

Liên hệ QC

Maika8008

Thành viên gạo cội
Tham gia
12/6/20
Bài viết
4,764
Được thích
5,724
Donate (Momo)
Donate
Giới tính
Nam
Về việc dùng combobox để tìm và nhập dữ liệu trực tiếp trên trang tính thì GPE có nhiều, nhưng nếu muốn sửa lại để dùng cho trường hợp cụ thể của bạn thì khá khó khăn nếu không rành về VBA.

Trong file này, tôi cố gắng viết code để đơn giản hóa việc chỉnh sửa kia, làm sao không những dễ cho người dùng mà ngay cả chính tôi sau 1 thời gian dài cũng không phải mất công bóp trán sửa để dùng cho một cách nào đó.

1. Đầu tiên bạn phải có danh mục làm nguồn cho combobox. Danh mục bao nhiêu cột là do yêu cầu quản lý mỗi người nhưng tối thiểu phải có 2 cột Mã số và Tên (hoặc diễn giải) - Hình 1 là danh mục hàng hóa gồm 5 cột như sau (Lưu ý để khai báo khi dùng: tôi bố trí dữ liệu đầu tiên là ô B2):
1650291605178.png
2. Cấu trúc vùng dữ liệu khi nhập, phổ biến một trong hai cách sau Mã - Tên hoặc Tên - Mã - Hình 2 (Lưu ý khi khai báo: Sheet chứa danh mục có tên là DM)
1650291752960.png
3. Khi cần nhập theo kiểu Mã - Tên, ở bước khai báo hãy nhập cột thứ nhất nhỏ hơn (<) cột thứ hai (Ví dụ tại hình 2, bạn cần nhập cột thứ nhất là 1 (tức là cột A) và cột thứ hai là 2 (là cột B) - Hình 3 là giao diện khi nhập kiểu này.
1650292063125.png
4. Nhập theo kiểu Tên - Mã, ở bước khai báo hãy nhập cột thứ nhất lớn hơn (>) cột thứ hai. Ví dụ: Cột thứ nhất nhập số 2 (tức cột B), cột thứ hai nhập số 1 (tức cột A). Hình 4 là giao diện kiểu nhập liệu này:
1650292252233.png
5. Khai báo trực tiếp trong code 2 thông tin như mục 1 và 2 đã nói - Hình 5 - Trong file, Sub KhaiBao chạy bằng phím tắt Ctrl+Shift+K. Nếu bạn dùng thực thì cài lại phím tắt hoặc chạy trực tiếp từ cửa sổ VBE. Việc khai báo này làm khi mở file, hoặc khi đổi sheet nhập liệu, hoặc cuối cùng là khi lỡ dừng code đột ngột.
1699275592431.png
6. Bạn chạy thử để biết việc tùy biến số cột Danh mục dùng cho combobox và ghi lên trang Data hoạt động ra sao. Nếu có lỗi là lỗi ở đây do tôi chưa kiểm tra kỹ. Nếu có lỗi xảy ra, hãy bình luận ở đây để tôi chỉnh sửa.
Lưu ý khi chèn combobox vào trang tính của bạn: hãy vào Developer, bấm Design Mode rồi copy combobox của file này sang để khỏi mất công thiết lập lại các thuộc tính mà tôi đã lập.

Cập nhật 22/04/2022: Thêm thiết lập dành cho ai chỉ cần nhập mã số nhưng tìm danh sách theo tên hàng:
=> Khai báo: Cột 2 lớn hơn Cột 1 một đơn vị và số cột cho combobox là 1 (VD: Cột 2 = 3, Cột 1 = 2 và số cột = 1)
Cập nhật 06/11/2023: Thêm khai báo dòng đầu tiên của dữ liệu (trong file mẫu là dòng 2: FrwData = 2). Sau khi thử nghiệm thành công, bạn vào Sub KhaiBao để đặt cố định các cột thay cho việc phải nhập qua Inputbox
 

File đính kèm

Lần chỉnh sửa cuối:
Chào bạn @Maika8008, file của bạn rất hữu ích. Bạn có thể giúp mình vấn đề này không? Mình đang nhập địa chỉ thường trú và tạm trú, nên liệu có cách nào áp dụng combobox này cho nhiều cột khác nhau (VD: cột D và cột F, và tất nhiên là combobox dùng chung dữ liệu của sheet DM). Cám ơn bạn rất nhiều.
 
Upvote 0
Chào bạn @Maika8008, file của bạn rất hữu ích. Bạn có thể giúp mình vấn đề này không? Mình đang nhập địa chỉ thường trú và tạm trú, nên liệu có cách nào áp dụng combobox này cho nhiều cột khác nhau (VD: cột D và cột F, và tất nhiên là combobox dùng chung dữ liệu của sheet DM). Cám ơn bạn rất nhiều.
Tôi chưa hiểu câu hỏi của bạn: áp dụng cho nhiều cột khác nhau là sao?
 
Upvote 0
Tôi chưa hiểu câu hỏi của bạn: áp dụng cho nhiều cột khác nhau là sao?
Chào bạn, thông số ban đầu mình nhập vào là 1-2-1. Mình có sheet DM như trong hình. Liệu có cách nào để áp dụng combobox cho cột C và cột E như trong hình (combobox sẽ lấy dữ liệu của cột B sheet DM) :) cbb.pngdm.png
 
Lần chỉnh sửa cuối:
Upvote 0
Chào bạn, thông số ban đầu mình nhập vào là 1-2-1. Mình có sheet DM như trong hình. Liệu có cách nào để áp dụng combobox cho cột C và cột E như trong hình (combobox sẽ lấy dữ liệu của cột B sheet DM) :)


Muốn đáp ứng yêu cầu của bạn thì:
Khai báo tuần tự 3 - 5 - 1, tức là cột thứ nhất là 3 (tức cột C sheet cần nhập liệu) , cột thứ hai là 5 (cột E sheet cần nhập liệu) và lấy 1 cột của DM (cột B)
 
Lần chỉnh sửa cuối:
Upvote 0
Muốn đáp ứng yêu cầu của bạn thì:
Khai báo tuần tự 3 - 5 - 1, tức là cột thứ nhất là 3 (tức cột C sheet cần nhập liệu) , cột thứ hai là 5 (cột E sheet cần nhập liệu) và lấy 1 cột của DM (cột B)
Mình làm theo sự hướng dẫn của bạn và đã thực hiện được. Cám ơn bạn, file rất tuyệt.
 
Upvote 0
--=0 Viết class cỡ này tôi viết hổng nổi.
Em nghĩ không cần Class cũng có thể viết được bằng kiểu truyền code từ addin vào file, em từng làm kiểu này rồi. Tuy nhiên Class chắc vẫn tối ưu hơn. Mà sao cái Class khoai thế, em đọc mãi vẫn mù tịt! Bác có tài liệu học về Class module không ạ?
 
Upvote 0
Em nghĩ không cần Class cũng có thể viết được bằng kiểu truyền code từ addin vào file, em từng làm kiểu này rồi. Tuy nhiên Class chắc vẫn tối ưu hơn. Mà sao cái Class khoai thế, em đọc mãi vẫn mù tịt! Bác có tài liệu học về Class module không ạ?
Tôi cũng mù nhưng chưa đến nỗi tịt. Nhưng dù gì thì tôi cũng không cố viết class nếu tình thế không bắt buộc. Tôi không có tài liệu nào về nó cả.
 
Upvote 0
Lần chỉnh sửa cuối:
Upvote 0
Về việc dùng combobox để tìm và nhập dữ liệu trực tiếp trên trang tính thì GPE có nhiều, nhưng nếu muốn sửa lại để dùng cho trường hợp cụ thể của bạn thì khá khó khăn nếu không rành về VBA.

Trong file này, tôi cố gắng viết code để đơn giản hóa việc chỉnh sửa kia, làm sao không những dễ cho người dùng mà ngay cả chính tôi sau 1 thời gian dài cũng không phải mất công bóp trán sửa để dùng cho một cách nào đó.
Bác cho em hỏi chút ạ:
1. Ở sheets data, khi nhỡ tay e chọn tất cả các Cell hoặc Ctrl-A thì có báo lỗi ạ, bác có thể chỉ cho em chỗ sửa mã để không bị lỗi khi chọn all các cell không ạ. Hoặc thêm lệnh chặn không cho ấn Ctrl-A cũng được ạ.
2. Trường hợp ngoài 2 ComboBox cho cột Mã hàng và cột Tên Hàng hóa, mà em muốn thêm comboBox để với tính năng tương tự cho cột "Đơn vị tính" và cột "Nhóm" thì có thể làm như nào không ạ?

Em cảm ơn ạ.
 

File đính kèm

  • CtrlA.JPG
    CtrlA.JPG
    56 KB · Đọc: 13
  • CtrlA_debug.JPG
    CtrlA_debug.JPG
    103.6 KB · Đọc: 13
Lần chỉnh sửa cuối:
Upvote 0
Bác cho em hỏi chút ạ:
1. Ở sheets data, khi nhỡ tay e chọn tất cả các Cell hoặc Ctrl-A thì có báo lỗi ạ, bác có thể chỉ cho em chỗ sửa mã để không bị lỗi khi chọn all các cell không ạ. Hoặc thêm lệnh chặn không cho ấn Ctrl-A cũng được ạ.
2. Trường hợp ngoài 2 ComboBox cho cột Mã hàng và cột Tên Hàng hóa, mà em muốn thêm comboBox để với tính năng tương tự cho cột "Đơn vị tính" và cột "Nhóm" thì có thể làm như nào không ạ?

Em cảm ơn ạ.
1. Để tôi xem lại sau, chừ không có máy tính.
2. Có thêm 1 cái combobox nữa thì chép tất cả các sub có liên quan cho nó và tỷ chỗ cần sửa nữa để chạy được.
 
Upvote 0
1. Để tôi xem lại sau, chừ không có máy tính.
2. Có thêm 1 cái combobox nữa thì chép tất cả các sub có liên quan cho nó và tỷ chỗ cần sửa nữa để chạy được.
Cái Ctrl-A báo lỗi em đặt lệnh "On Error Resume Next" trong Sub nên tạm không bị báo lỗi nữa rồi ạ.
Còn chỗ thêm combobox nữa thì em đang nghiên cứu code của bác, hơi phức tạp với em nên vẫn chưa biết cách và chỗ nào để chỉnh ạ. Bác có thể chỉ điểm thêm giúp em được không ạ?
 
Upvote 0
Em chào anh @Maika8008 và các anh chị em,

File của anh rất tuyệt vời và hữu ích, tuy nhiên do nhu cầu sử dụng khác nhau, cũng như đối với những người không rành về VBA như em. Nhờ anh viết dùm em cái code tìm kiếm để cải thiện không bị chậm như file hiện tại của em (giống combobox ở Sheet Data của anh siêu mượt). Mong anh phản hồi!


1701655308272.png
 

File đính kèm

Upvote 0
Em chào anh @Maika8008 và các anh chị em,

File của anh rất tuyệt vời và hữu ích, tuy nhiên do nhu cầu sử dụng khác nhau, cũng như đối với những người không rành về VBA như em. Nhờ anh viết dùm em cái code tìm kiếm để cải thiện không bị chậm như file hiện tại của em (giống combobox ở Sheet Data của anh siêu mượt). Mong anh phản hồi!


View attachment 297304
Có thấy code gì trong file giống bài 1 đâu mà sửa nhỉ?
Bạn thử áp dụng code của bài 1 đã
 
Upvote 0
Có thấy code gì trong file giống bài 1 đâu mà sửa nhỉ?
Bạn thử áp dụng code của bài 1 đã
Dạ đây ạ,
1701658198009.png
Ý em muốn nhờ anh chị code lại dùm em để cải thiện tốc độ tìm kiếm ạ, vì hiện tại khi tìm kiếm tên hàng thì hơi giật giật không như cái combobox của anh Maika8008 (ở sheet Data - trong file bài #1 của ảnh)
 
Upvote 0
Về việc dùng combobox để tìm và nhập dữ liệu trực tiếp trên trang tính thì GPE có nhiều, nhưng nếu muốn sửa lại để dùng cho trường hợp cụ thể của bạn thì khá khó khăn nếu không rành về VBA.

Trong file này, tôi cố gắng viết code để đơn giản hóa việc chỉnh sửa kia, làm sao không những dễ cho người dùng mà ngay cả chính tôi sau 1 thời gian dài cũng không phải mất công bóp trán sửa để dùng cho một cách nào đó.

1. Đầu tiên bạn phải có danh mục làm nguồn cho combobox. Danh mục bao nhiêu cột là do yêu cầu quản lý mỗi người nhưng tối thiểu phải có 2 cột Mã số và Tên (hoặc diễn giải) - Hình 1 là danh mục hàng hóa gồm 5 cột như sau (Lưu ý để khai báo khi dùng: tôi bố trí dữ liệu đầu tiên là ô B2):
View attachment 274636
2. Cấu trúc vùng dữ liệu khi nhập, phổ biến một trong hai cách sau Mã - Tên hoặc Tên - Mã - Hình 2 (Lưu ý khi khai báo: Sheet chứa danh mục có tên là DM)
View attachment 274637
3. Khi cần nhập theo kiểu Mã - Tên, ở bước khai báo hãy nhập cột thứ nhất nhỏ hơn (<) cột thứ hai (Ví dụ tại hình 2, bạn cần nhập cột thứ nhất là 1 (tức là cột A) và cột thứ hai là 2 (là cột B) - Hình 3 là giao diện khi nhập kiểu này.
View attachment 274638
4. Nhập theo kiểu Tên - Mã, ở bước khai báo hãy nhập cột thứ nhất lớn hơn (>) cột thứ hai. Ví dụ: Cột thứ nhất nhập số 2 (tức cột B), cột thứ hai nhập số 1 (tức cột A). Hình 4 là giao diện kiểu nhập liệu này:
View attachment 274639
5. Khai báo trực tiếp trong code 2 thông tin như mục 1 và 2 đã nói - Hình 5 - Trong file, Sub KhaiBao chạy bằng phím tắt Ctrl+Shift+K. Nếu bạn dùng thực thì cài lại phím tắt hoặc chạy trực tiếp từ cửa sổ VBE. Việc khai báo này làm khi mở file, hoặc khi đổi sheet nhập liệu, hoặc cuối cùng là khi lỡ dừng code đột ngột.
View attachment 296477
6. Bạn chạy thử để biết việc tùy biến số cột Danh mục dùng cho combobox và ghi lên trang Data hoạt động ra sao. Nếu có lỗi là lỗi ở đây do tôi chưa kiểm tra kỹ. Nếu có lỗi xảy ra, hãy bình luận ở đây để tôi chỉnh sửa.
Lưu ý khi chèn combobox vào trang tính của bạn: hãy vào Developer, bấm Design Mode rồi copy combobox của file này sang để khỏi mất công thiết lập lại các thuộc tính mà tôi đã lập.

Cập nhật 22/04/2022: Thêm thiết lập dành cho ai chỉ cần nhập mã số nhưng tìm danh sách theo tên hàng:
=> Khai báo: Cột 2 lớn hơn Cột 1 một đơn vị và số cột cho combobox là 1 (VD: Cột 2 = 3, Cột 1 = 2 và số cột = 1)
Cập nhật 06/11/2023: Thêm khai báo dòng đầu tiên của dữ liệu (trong file mẫu là dòng 2: FrwData = 2). Sau khi thử nghiệm thành công, bạn vào Sub KhaiBao để đặt cố định các cột thay cho việc phải nhập qua Inputbox

Anh cho em hỏi nếu muốn cho combobox cao hơn xíu (không bị che chữ tìm kiếm) thì chỉnh ở đâu ạ?

1701743422974.png
 
Upvote 0
Upvote 0
Bạn thử điều chỉnh chiều cao dòng của trang tính Excel xem. Tôi nhớ là tôi đã thiết đặt chiều cao combobox bằng với chiều cao dòng.
Dạ, em làm được rồi ạ. Cám ơn anh! Với em có 3 vấn đề muốn hỏi (Vì không phải người rành về VBA nếu có gì xin hãy bỏ qua)
1/ Combobox có dùng được cho việc Autofilter như hình ở bài #53 không?
2/ Có thể bổ sung thêm tính năng di chuyển qua lại giữa cột mã hàng và tên hàng bằng phím Tab!
3/ Thay vì nếu gõ sai thì phải bấm Backspace để xóa sẽ tuyệt với hơn nếu double-click xóa nội dung trong combobox!
 
Upvote 0
Dạ, em làm được rồi ạ. Cám ơn anh! Với em có 3 vấn đề muốn hỏi (Vì không phải người rành về VBA nếu có gì xin hãy bỏ qua)
1/ Combobox có dùng được cho việc Autofilter như hình ở bài #53 không?
2/ Có thể bổ sung thêm tính năng di chuyển qua lại giữa cột mã hàng và tên hàng bằng phím Tab!
3/ Thay vì nếu gõ sai thì phải bấm Backspace để xóa sẽ tuyệt với hơn nếu double-click xóa nội dung trong combobox!
Tôi chưa trả lời ngay được cho bạn. Từ từ tôi sẽ nghiên cứu xem thế nào.
 
Upvote 0
Cám ơn Maika8008 rất nhiều, Tools rất có ích.
Tôi đang áp dụng nhưng gặp vấn đề về code VBA như sau:
Khi nhập dữ liệu vào Combo Box mà muốn sử dụng được phím Dellete, Back Space, Tab đều không được. Nhờ bạn code hộ mấy cái Case:
- Tab: Nhảy sang ô tiếp theo cùng hàng
- Dellete: Xóa toàn bộ dữ liệu đã nhập vào và di chuyển con trỏ về đầu tiên.
- Back space: Xóa lùi 1 ký tự vừa nhập vào.
Thanks so much!
Bài đã được tự động gộp:

Cám ơn Maika8008 rất nhiều, Tools rất có ích.
Tôi đang áp dụng nhưng gặp vấn đề về code VBA như sau:
Khi nhập dữ liệu vào Combo Box mà muốn sử dụng được phím Dellete, Back Space, Tab đều không được. Nhờ bạn code hộ mấy cái Case:
- Tab: Nhảy sang ô tiếp theo cùng hàng
- Dellete: Xóa toàn bộ dữ liệu đã nhập vào và di chuyển con trỏ về đầu tiên.
- Back space: Xóa lùi 1 ký tự vừa nhập vào.
Thanks so much!
Bài đã được tự động gộp:

Cám ơn Maika8008 rất nhiều, Tools rất có ích.
Tôi đang áp dụng nhưng gặp vấn đề về code VBA như sau:
Khi nhập dữ liệu vào Combo Box mà muốn sử dụng được phím Dellete, Back Space, Tab đều không được. Nhờ bạn code hộ mấy cái Case:
- Tab: Nhảy sang ô tiếp theo cùng hàng
- Dellete: Xóa toàn bộ dữ liệu đã nhập vào và di chuyển con trỏ về đầu tiên.
- Back space: Xóa lùi 1 ký tự vừa nhập vào.
Bạn thử điều chỉnh chiều cao dòng của trang tính Excel xem. Tôi nhớ là tôi đã thiết đặt chiều cao combobox bằng với chiều cao dòng.

Thanks so much!
 
Upvote 0
Web KT

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

Back
Top Bottom