Giải pháp tốt hơn cho DATA LIST (4 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Cá ngừ F1

( ͡° ͜ʖ ͡°)
Thành viên BQT
Moderator
Tham gia
1/1/08
Bài viết
2,579
Được thích
3,723
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Quan hệ.. và quan hệ..
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!
 

File đính kèm

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!

Trong Code có đoạn
Set rng = Sheets("sheet1").Range("B2:D91")
thay thành
Set rng = Sheets("sheet1").Range("B2:D104800")
Mảng dài hết sheet cũng không bị lỗi
 
Trong Code có đoạn
Set rng = Sheets("sheet1").Range("B2:D91")
thay thành
Set rng = Sheets("sheet1").Range("B2:D104800")
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..
 
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..

Đó 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
 
Đó 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
- 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..
 
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..
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ì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
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à nhiều khi ko hiểu lý do gì mà có lúc vài trăm bản ghi cũng báo lỗi, hjk
 
- 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..
Một cách làm theo hướng này:
- Dùng em "Đít- to" lọc duy nhất
- Gán kết quả vào một cột nào đó trên sheet
- Đặt name cho gọn ghẽ đẹp đẽ
- Gán name đó vào cell muốn có vali
- Xong, nhìn thấy ......ớn. Híc
Thân
 

File đính kèm

Đó 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
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
 
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
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:
Mã:
Private Sub ComboBox1_DropButtonClick()
  Dim arr
  arr = UniqueList(Sheets("Sheet1").Range("B2:D10000"))
  If IsArray(arr) Then ComboBox1.List() = arr
End Sub
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ử
 
Lần chỉnh sửa cuối:
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:
Mã:
Private Sub ComboBox1_DropButtonClick()
  Dim arr
  arr = UniqueList(Sheets("Sheet1").Range("B2:D10000"))
  If IsArray(arr) Then ComboBox1.List() = arr
End Sub
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ử
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ì)
 
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ì)

Vụ 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
 
Vụ 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
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, hjk
 
Web KT

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

Back
Top Bottom