Tôi mới học được cách sử dụng Name động, nhưng khi thử gán Name đó vào RowSource của Combobox thì báo lỗi.
1) Xin cho biết tại sao?
2) Nếu có thể, các Anh Chị hướng dẫn tôi viết code để gán cái Name động vào RowSource của Combobox được không?
Xin chân thành cảm ơn.
Hoàn toàn có thể gán 1 Name động làm ListFillRange cho 1 combobox. Nếu Combobox thuộc nhóm Form control thì tự cập nhật khi name động đậy, còn Combobox thuộc nhóm control toolbox thì phải dùng code mỗi khi Name thay đổi. Thí dụ 1 Name:
=OFFSET(Sheet1!$A$1;Sheet1!$C$1;0;COUNTA(Sheet1!$A$1:$A$50)-Sheet1!$C$1;1)
Kích thước và vị trí thay đổi khi thêm dữ liệu hoặc thay đổi tham chiếu C1. Code để cập nhật List có nhiều cách, thí dụ:
Nếu combobox nằm cùng sheet với Data của Name:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$1" Or Target.Column = 1 Then Me.ComboBox1.ListFillRange = "abc"
End Sub
Nếu Combobox nằm khác sheet:
PHP:
Private Sub Worksheet_Activate()
Me.ComboBox1.ListFillRange = "abc"
End Sub
Thêm:
Nếu Combobox nằm trên form, chỉ tự cập nhật khi mở form, còn nếu trong quá trình làm việc trên form có thêm bớt hoặc thay đổi tham chiếu của Name, thì combobox cũng không cập nhật.
Tôi mới học được cách sử dụng Name động, nhưng khi thử gán Name đó vào RowSource của Combobox thì báo lỗi.
1) Xin cho biết tại sao?
2) Nếu có thể, các Anh Chị hướng dẫn tôi viết code để gán cái Name động vào RowSource của Combobox được không?
Xin chân thành cảm ơn.
1. Dùng ComboBox thuộc nhóm Form Controls trên Sheet thì khi gán Name động vào thì nó sẽ tự cập nhật danh sách các phần tử.
2. Dùng ComboBox thuộc nhóm ActiveX Controls trên Sheet thì mình phải viết code cập nhật lại vùng dữ liệu cho ComboBox. Ví dụ danh sách được gán Name động tên là List thì chèn code sau vào sheet chứa ComboBox
PHP:
Private Sub ComboBox1_Change()
Me.ComboBox1.ListFillRange = "List"
End Sub
3. Nếu là ComboBox thuộc nhóm ActiveX Controls trên Form thì cũng cần viết code cập nhật lại danh sách mỗi khi sử dụng ComboBox
Nếu Combobox nằm trên Form như file của Thanh Phong, sẽ phải gán rowsource trước khi mở form, còn Form của Chibi thì không cần. Tôi tìm ra nguyên nhân là do Thanh Phong chỉ Hide Form, nếu Unload Form thì sẽ không cần. Combobox tự cập nhật khi load form.
Cám ơn các THẦY rất nhiều ạ! Nhờ bài của các THẦY mà em đã mở mang tầm mắt. Kính chúc các THẦY dồi dào sức khỏe, Chúc ngày Chủ nhật thật nhiều niềm vui.
ở đây mình thấy mọi người đang fix sẵn rowsource của combobox sẵn trong phần prototype của combobox bằng định danh Tabe vùng dữ liệu.
giả sửa trong trường hợp ta truy vấn và vì 1 lỗi nào đó ghi đè thông tin mới lên vùng định danh đó thì chương trình có load được cái thông tin mới đó lên không?
ở đây mình thấy mọi người đang fix sẵn rowsource của combobox sẵn trong phần prototype của combobox bằng định danh Tabe vùng dữ liệu.
giả sửa trong trường hợp ta truy vấn và vì 1 lỗi nào đó ghi đè thông tin mới lên vùng định danh đó thì chương trình có load được cái thông tin mới đó lên không?
ở đây mình thấy mọi người đang fix sẵn rowsource của combobox sẵn trong phần prototype của combobox bằng định danh Tabe vùng dữ liệu.
giả sử trong trường hợp ta truy vấn và vì 1 lỗi nào đó ghi đè thông tin mới lên vùng định danh đó thì chương trình có load được cái thông tin mới đó lên không?
ở đây mình thấy mọi người đang fix sẵn rowsource của combobox sẵn trong phần prototype của combobox bằng định danh Tabe vùng dữ liệu.
giả sửa trong trường hợp ta truy vấn và vì 1 lỗi nào đó ghi đè thông tin mới lên vùng định danh đó thì chương trình có load được cái thông tin mới đó lên không?
1. Nhiều người có thói quen rất xấu là khi nói chuyện hay mô tả thì dùng từ rất bừa bãi. Tên sheet, tiêu đề cột, trên thực tế khác mà trong mô tả khác, tên vùng dữ liệu thì lại thay bằng tên Table.
2. Cần gì hỏi. Cái này thuộc thể loại: tự kiểm tra được, không cần hỏi.
Gợi ý: Đặt tên cho vùng dữ liệu là hichic -> trong UserForm_Initialize thiết lập ComboBox1.RowSource là hichic -> trong CommandButton1_Click thay đổi nội dung vài ô trong vùng hichic -> Sau khi mở Form thì mở danh sách thả để xem các mục của ComboBox1 -> nhấn CommandButton1 -> mở lại danh sách của ComboBox1 và so sánh với danh sách lúc trước -> rút ra kết luận.
ở đây mình thấy mọi người đang fix sẵn rowsource của combobox sẵn trong phần prototype của combobox bằng định danh Tabe vùng dữ liệu.
giả sửa trong trường hợp ta truy vấn và vì 1 lỗi nào đó ghi đè thông tin mới lên vùng định danh đó thì chương trình có load được cái thông tin mới đó lên không?
1. Nhiều người có thói quen rất xấu là khi nói chuyện hay mô tả thì dùng từ rất bừa bãi. Tên sheet, tiêu đề cột, trên thực tế khác mà trong mô tả khác, tên vùng dữ liệu thì lại thay bằng tên Table.
2. Cần gì hỏi. Cái này thuộc thể loại: tự kiểm tra được, không cần hỏi.
Gợi ý: Đặt tên cho vùng dữ liệu là hichic -> trong UserForm_Initialize thiết lập ComboBox1.RowSource là hichic -> trong CommandButton1_Click thay đổi nội dung vài ô trong vùng hichic -> Sau khi mở Form thì mở danh sách thả để xem các mục của ComboBox1 -> nhấn CommandButton1 -> mở lại danh sách của ComboBox1 và so sánh với danh sách lúc trước -> rút ra kết luận.