[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,741
Được thích
5,669
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

  • 1650292464573.png
    1650292464573.png
    10 KB · Đọc: 1,387
  • 3.Combobox_Search_All_061123.xlsm
    378.3 KB · Đọc: 106
Lần chỉnh sửa cuối:
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 274640
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.
Ở sheet Data vị trí bắt đầu bảng nhập liệu nằm ở ô A2, nếu muốn thay đổi vị trí bắt đầu bảng nhập liệu này thì chỉnh ở đâu trong code, nhờ anh chỉ giúp. Em có xem bài anh tặng file quản lý vật tư - công nợ trước đây, anh có thêm nút on/off này khá thuận tiên trong việc copy - paste. Bản thân em khi sử dụng combobox nhập liệu rất dễ dàng, tuy nhiên khi không cần nhập liệu mà cần xử lý thì khá vướng víu, nếu có thể on/off nhập liệu rất thuận tiện.

Cảm ơn anh.

1650360690263.png
 

File đính kèm

  • 1650360685656.png
    1650360685656.png
    3.1 KB · Đọc: 17
Lần chỉnh sửa cuối:
Upvote 0
Ở sheet Data vị trí bắt đầu bảng nhập liệu nằm ở ô A2, nếu muốn thay đổi vị trí bắt đầu bảng nhập liệu này thì chỉnh ở đâu trong code, nhờ anh chỉ giúp. Em có xem bài anh tặng file quản lý vật tư - công nợ trước đây, anh có thêm nút on/off này khá thuận tiên trong việc copy - paste. Bản thân em khi sử dụng combobox nhập liệu rất dễ dàng, tuy nhiên khi không cần nhập liệu mà cần xử lý thì khá vướng víu, nếu có thể on/off nhập liệu rất thuận tiện.

Cảm ơn anh.

View attachment 274704
Ở mục 1 tôi có nói là danh mục tôi bố trí bắt đầu ở B2 đó bạn. Bạn theo đó mà làm nhé
 
Upvote 0
Ở mục 1 tôi có nói là danh mục tôi bố trí bắt đầu ở B2 đó bạn. Bạn theo đó mà làm nhé
Chỗ bắt đầu lấy dữ liệu của sheet DM thì em hiểu rồi anh, tuy nhiên khi nhập liệu ở sheet Data thay vì mặc định bắt đầu từ ô A2 như hiện tại thì làm sao để thay đổi được anh, ví dụ em muốn bắt đầu từ ô B4 chẳng hạn.
 
Upvote 0
Chỗ bắt đầu lấy dữ liệu của sheet DM thì em hiểu rồi anh, tuy nhiên khi nhập liệu ở sheet Data thay vì mặc định bắt đầu từ ô A2 như hiện tại thì làm sao để thay đổi được anh, ví dụ em muốn bắt đầu từ ô B4 chẳng hạn.
Trong thủ tục này:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim chk As Boolean
If ShName = "" Then KhaiBao
For Each ssh In Worksheets
If ssh.Name = ShName Then chk = True: Exit For
Next
If chk = False Then MsgBox "Ten sheet khong dung!": Exit Sub
With Sheets(ShName)

If Target.Count = 1 And Target.Row > 1 Then
.............

Thay Target.Row > 1 bằng Target.Row > 3 thì chỉ khi bấm dòng 4 trở lên mới hiện combobox
 
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 274640
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.
Bạn cho mình hỏi cái combobox này mình click vô mình đánh chữ vẫn hiện ra những từ gợi ý phải không bạn, mình thấy hình như vậy.
 
Upvote 0
Upvote 0
Cập nhật 22/04/2022: Thêm thiết lập để chỉ cần nhập mỗi mã số nhưng muốn 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ị
- Số cột cho combobox là 1

(VD: Cột 2 = 3, Cột 1 = 2 và số cột = 1)
 
Upvote 0
Bạn cho mình hỏi:
1) Muốn bỏ combo box ở cột B sheet DATA thì làm như thế nào :)
2) Mình muốn gán 3 thông số khi khai báo lúc mở file lần lượt là (1) (2) và (1) (Thêm thiết lập để chỉ cần nhập mỗi mã số nhưng muốn tìm danh sách theo tên hàng) thì làm như thế nào nhỉ :)
Cám ơn bạn rất nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
e muốn dùng combobox cho nhiều cột thì làm cách nào ạ
 
Upvote 0
Bạn cho mình hỏi:
1) Muốn bỏ combo box ở cột B sheet DATA thì làm như thế nào ?
2) Mình muốn gán 3 thông số khi khai báo lúc mở file lần lượt là (1) (2) và (1) (Thêm thiết lập để chỉ cần nhập mỗi mã số nhưng muốn tìm danh sách theo tên hàng) thì làm như thế nào?
Cám ơn bạn rất nhiều.
 
Upvote 0
Bạn cho mình hỏi:
1) Muốn bỏ combo box ở cột B sheet DATA thì làm như thế nào ?
2) Mình muốn gán 3 thông số khi khai báo lúc mở file lần lượt là (1) (2) và (1) (Thêm thiết lập để chỉ cần nhập mỗi mã số nhưng muốn tìm danh sách theo tên hàng) thì làm như thế nào?
Cám ơn bạn rất nhiều.
Bạn cứ thử gán 2, 1, 1 rồi chạy xem nó như thế nào.
 
Upvote 0
Bạn cứ thử gán 2, 1, 1 rồi chạy xem nó như thế nào.
Do mình nói không rõ nên làm bạn hiểu lầm. Ý mình là gán cố định (tức là điền trực tiếp 3 thông số này vào code) thì mình sẽ thay đổi dòng code nào của bạn? Mục đích của mình là không tốn thời gian nhập 3 thông số trên mỗi khi mở file. Cám ơn bạn rất nhiều.
 
Upvote 0
Do mình nói không rõ nên làm bạn hiểu lầm. Ý mình là gán cố định (tức là điền trực tiếp 3 thông số này vào code) thì mình sẽ thay đổi dòng code nào của bạn? Mục đích của mình là không tốn thời gian nhập 3 thông số trên mỗi khi mở file. Cám ơn bạn rất nhiều.
1. Xóa sự kiện Workbook_Open trong module ThisWorkbook.
2. Ở sub KhaiBao của module sheet Data, gán thẳng Col1=x, Col2=y, Cols=z thay cho Inputbox(...)
 
Upvote 0
1. Xóa sự kiện Workbook_Open trong module ThisWorkbook.
2. Ở sub KhaiBao của module sheet Data, gán thẳng Col1=x, Col2=y, Cols=z thay cho Inputbox(...)
Cám ơn bạn, mình đã làm được.
Bạn cho mình hỏi thêm. Khi cập nhật thông tin cho sheet DM, mình phải save, tắt và mở lại thì dữ liệu mới được cập nhật. Không biết có cách nào để mình chỉ cần save thì dữ liệu sẽ được cập nhật vào khung gợi ý không :)
 
Upvote 0
Cám ơn bạn, mình đã làm được.
Bạn cho mình hỏi thêm. Khi cập nhật thông tin cho sheet DM, mình phải save, tắt và mở lại thì dữ liệu mới được cập nhật. Không biết có cách nào để mình chỉ cần save thì dữ liệu sẽ được cập nhật vào khung gợi ý không :)
Được chứ. Tôi quên mất việc này.
 
Upvote 0
Được chứ. Tôi quên mất việc này.
Làm phiền bạn lần cuối, bạn cho mình hỏi cách tắt combobox ở cột B sheet DATA. Vì sau khi nhập Mã sản phẩm (vào cột A) thì mình sẽ nhập tiếp số lượng vào cột B.
Code combobox của bạn rất tuyệt. Chúc bạn một ngày tốt lành.
 
Upvote 0
Làm phiền bạn lần cuối, bạn cho mình hỏi cách tắt combobox ở cột B sheet DATA. Vì sau khi nhập Mã sản phẩm (vào cột A) thì mình sẽ nhập tiếp số lượng vào cột B.
Code combobox của bạn rất tuyệt. Chúc bạn một ngày tốt lành.
Bài #13 bạn đã hỏi và tôi trả lời tại #14. Tôi vẫn hiểu câu hỏi của bạn mà. Bạn chưa thử gán như vậy sao?

P/S:
1. Tôi chỉ dẫn sai ở bài #16. Bạn chỉ cần làm mục 2 thôi.
2. Trả lời cho #17: Bạn chép đoạn code sau vào module ThisWorkbook
Rich (BB code):
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Sheet2.KhaiBao
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom