Mở rộng hơn về Data validation.. e có tình huống trong file đính kèm
Câu hỏi e có ghi chi tiết trong file.
Mong mng giúp đỡ
E Cảm ơn nhiều ạh!
Ko phải nằm ở đó đâu a.. vấn đề là ở code trong module, nó ko chịu được mảng quá dài như vậy..Trong Code có đoạn
Set rng = Sheets("sheet1").Range("B291")
thay thành
Set rng = Sheets("sheet1").Range("B2104800")
Mảng dài hết sheet cũng không bị lỗi
Ko phải nằm ở đó đâu a.. vấn đề là ở code trong module, nó ko chịu được mảng quá dài như vậy..
- Thầy có thể hướng dẫn theo cách 1 được ko ạh (lọc duy nhất theo cột phụ) e có thử dùng Consolidate thì nó chỉ có thể lấy duy nhất được cột ngoài cùng bên trái... phá sản nếu như các cột còn lại có giá trị khác..Đó là giới hạn của Validation, do bác Bill quy định nó như vậy rồi, không liên quan gì đến code
Vậy nên, code trên chỉ thích hợp với dạng dùng list ngắn ngắn, còn list dài quá thì ta có 2 cách:
- Lọc duy nhất ra 1 cột phụ, dùng cột này làm list
- Không dùng validation nữa, chuyển sang dùng ComboBox
Vậy thôi
Mình không biết bạn cần cái thằng vali dài tới cỡ nào, với dữ liệu trong bài, thử thì 1000 em mà nó chưa báo lỗi. Híc, vali mà dài "thòn lòn" vậy nhìn nó cũng sao sao í, mà dài thế tìm được một em trong đó cũng oải chứ nhỉ ?Ko phải nằm ở đó đâu a.. vấn đề là ở code trong module, nó ko chịu được mảng quá dài như vậy..
Nói chung là e hơi cầu toàn để đề phòng thôi.. vì bản ghi có thể dài mãi.. vì dân số tăng.. con người tăng.. khách hàng cũng tăng.. hìMình không biết bạn cần cái thằng vali dài tới cỡ nào, với dữ liệu trong bài, thử thì 1000 em mà nó chưa báo lỗi. Híc, vali mà dài "thòn lòn" vậy nhìn nó cũng sao sao í, mà dài thế tìm được một em trong đó cũng oải chứ nhỉ ?
Thân
Một cách làm theo hướng này:- Thầy có thể hướng dẫn theo cách 1 được ko ạh (lọc duy nhất theo cột phụ) e có thử dùng Consolidate thì nó chỉ có thể lấy duy nhất được cột ngoài cùng bên trái... phá sản nếu như các cột còn lại có giá trị khác..
Thày/anh/chị có thể hướng dẫn từng bước từng bước với combobox được ko ạh. Đọc mấy file mà choáng váng ko biết bắt đầu từ đâu..hjkĐó là giới hạn của Validation, do bác Bill quy định nó như vậy rồi, không liên quan gì đến code
Vậy nên, code trên chỉ thích hợp với dạng dùng list ngắn ngắn, còn list dài quá thì ta có 2 cách:
- Lọc duy nhất ra 1 cột phụ, dùng cột này làm list
- Không dùng validation nữa, chuyển sang dùng ComboBox
Vậy thôi
Không có gì dễ bằng! Vẫn dùng hàm đã có nha (là hàm UniqueList đấy)Thày/anh/chị có thể hướng dẫn từng bước từng bước với combobox được ko ạh. Đọc mấy file mà choáng váng ko biết bắt đầu từ đâu..hjk
Private Sub ComboBox1_DropButtonClick()
Dim arr
arr = UniqueList(Sheets("Sheet1").Range("B2:D10000"))
If IsArray(arr) Then ComboBox1.List() = arr
End Sub
Dạ được rồi thầy... sau khi kích chọn 1 giá trị ở combo và lấy làm tham chiếu (lookup_value) thì như thế nào ạh (như data vali thì kích thẳng vào ô là lookup_value, còn cái này e chả biết kích vào đâu, hì)Không có gì dễ bằng! Vẫn dùng hàm đã có nha (là hàm UniqueList đấy)
- Vẽ 1 ComboBox lên sheet
- Double click vào nó, sẽ mở cửa sổ VBA, chèn code này vào:
Xong, Trở lại bảng tính, bấm nút Design Mode (trên tab Developer) rồi bấm chuột vào mũi tên xổ xuống của ComboBox xem thửMã:Private Sub ComboBox1_DropButtonClick() Dim arr arr = UniqueList(Sheets("Sheet1").Range("B2:D10000")) If IsArray(arr) Then ComboBox1.List() = arr End Sub
Dạ được rồi thầy... sau khi kích chọn 1 giá trị ở combo và lấy làm tham chiếu (lookup_value) thì như thế nào ạh (như data vali thì kích thẳng vào ô là lookup_value, còn cái này e chả biết kích vào đâu, hì)
Private Sub ComboBox1_Click()
Range("A1").Value = ComboBox1.Text
End Sub
Dạ.. e đang leo từ trên ngọn cây xuống đó ạh... chứ ko phải đi từ gốc đi lên, hjkVụ gì vậy? Bạn muốn khi CLICK CHỌN VÀ LẤY RA GIÁ TRỊ, vậy đương nhiên phải thêm sự kiện ComboBox1_Click chứ gì nữa
Ví dụ:
Mã:Private Sub ComboBox1_Click() Range("A1").Value = ComboBox1.Text End Sub
Nghĩa là gán ComboBox1.Text vào cell A1
Hoặc giả cũng chẳng cần phải gán vào cell, bạn muốn làm gì, cứ xử lý trực tiếp từ ComboBox1.Text luôn