Cho mình hỏi cách tạo list (3 người xem)

Liên hệ QC

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

To : huuthang_bd
Sao tôi chọn G4 => H4 không xuất hiện nút chọn nhỉ ?
Là sao nhỉ?
Code viết dựa vào sự kiện SelectionChange. Vì vậy, sau khi thay đổi giá trị ở cột G phải nhấp chọn ô ở cột H thì mới xuất hiện nút chọn chứ. Bình thường cũng thế thôi. Một list validation chỉ xuất hiện nút chọn khi ô đó được active.
 
Là sao nhỉ?
Code viết dựa vào sự kiện SelectionChange. Vì vậy, sau khi thay đổi giá trị ở cột G phải nhấp chọn ô ở cột H thì mới xuất hiện nút chọn chứ. Bình thường cũng thế thôi. Một list validation chỉ xuất hiện nút chọn khi ô đó được active.
Thật sự code này không hoạt động (chọn cột H chẳng có gì hiện ra cả)
----------
Như tôi đã nói, hình thức nhập liệu này nên dùng UserForm sẽ nhanh hơn mà chẳng bao giờ bị lổi
Từ bài này:
http://www.giaiphapexcel.com/forum/showpost.php?p=166134&postcount=10
Tôi xây dựng lại code, bỏ bớt 1 vài thứ không cần thiết

attachment.php


Xem file
 

File đính kèm

File đính kèm

Lạ quá nhỉ. Tôi mở file và chẳng thấy gì bất thường cả. Không lẽ lỗi do phiên bản của Excel. Tôi sẽ text trên Excel 2003.
Tôi cũng dùng Excel 2003 đây!
Lổi của nó thế này:
- Ban đầu chọn cột H, có nhìn thấy Validation
- Sau khi vào cột G và chọn gì đó, chuyển sang cột H thì... chẳng còn thấy gì xuất hiện ---> Validation đã bị xóa
 
Tôi cũng dùng Excel 2003 đây!
Lổi của nó thế này:
- Ban đầu chọn cột H, có nhìn thấy Validation
- Sau khi vào cột G và chọn gì đó, chuyển sang cột H thì... chẳng còn thấy gì xuất hiện ---> Validation đã bị xóa
Tôi dùng Excel 2007 không thấy hiện tượng gì. Sẽ text trên Excel 2003 (Nhưng hiện tại chưa text được)
Theo mô tả của bác không lẽ Excel 2003 không hiểu dòng lệnh này:
PHP:
Target.Validation.Add Type:=xlValidateList, Formula1:="..."
 
Tôi dùng Excel 2007 không thấy hiện tượng gì. Sẽ text trên Excel 2003 (Nhưng hiện tại chưa text được)
Theo mô tả của bác không lẽ Excel 2003 không hiểu dòng lệnh này:
PHP:
Target.Validation.Add Type:=xlValidateList, Formula1:="..."
Tôi biết tại sao rồi...
Trong code của bạn có đoạn:
Target.Validation.Add Type:=xlValidateList, Formula1:="='" & Me.Name & "'!" & GPE....
Sửa lại thành:
Target.Validation.Add 3, , , "=" & GPE....
Là xong!
Công thức trong validation không cần tên sheet
 
Là sao nhỉ?
Code viết dựa vào sự kiện SelectionChange. Vì vậy, sau khi thay đổi giá trị ở cột G phải nhấp chọn ô ở cột H thì mới xuất hiện nút chọn chứ. Bình thường cũng thế thôi. Một list validation chỉ xuất hiện nút chọn khi ô đó được active.
------
Bạn huuthang_bd ơi, tôi test code kỷ rồi tôi mới hỏi chứ ?

Sao tôi chọn G4 => H4 không xuất hiện nút chọn nhỉ ?

Tôi dùng excel 2003, phiền bạn kiểm tra lại xem sao ?
 
Tôi biết tại sao rồi...
Trong code của bạn có đoạn:
Target.Validation.Add Type:=xlValidateList, Formula1:="='" & Me.Name & "'!" & GPE....
Sửa lại thành:
Target.Validation.Add 3, , , "=" & GPE....
Là xong!
Công thức trong validation không cần tên sheet
Không cần nhưng đúng ra có cũng không sao chứ. Đàng này lại không được. Chả hiểu bác Bill.
Excel 2007 thì ko vấn đề gì.
 
Không cần nhưng đúng ra có cũng không sao chứ. Đàng này lại không được. Chả hiểu bác Bill.
Excel 2007 thì ko vấn đề gì.
Tôi cho rằng như vậy mới đúng ---> Rõ ràng Validation không cho phép lấy list ở sheet khác cơ mà
Bạn thử tạo list trong Validation và thêm tên sheet vào xem nó có chịu không?
Lưu ý rằng: Excel 2007 cho phép lấy list tại sheet khác
 
Tôi cho rằng như vậy mới đúng ---> Rõ ràng Validation không cho phép lấy list ở sheet khác cơ mà
Bạn thử tạo list trong Validation và thêm tên sheet vào xem nó có chịu không?
Lưu ý rằng: Excel 2007 cho phép lấy list tại sheet khác
------
Nguyên văn bởi huuthang_bd
Không cần nhưng đúng ra có cũng không sao chứ. Đàng này lại không được. Chả hiểu bác Bill.
Excel 2007 thì ko vấn đề gì.
-------
Dạ, em đã test code đây 2 anh, chú NDU => chính xác
Được 1 đòi 2 ( không được thì thôi :-= ) : em có ghi trong file.
Đính kèm file.
Em cám ơn 2 anh.
 

File đính kèm

------

-------
Dạ, em đã test code đây 2 anh, chú NDU => chính xác
Được 1 đòi 2 ( không được thì thôi :-= ) : em có ghi trong file.
Đính kèm file.
Em cám ơn 2 anh.
Bạn xem cái này xem được không.
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Intersect(UsedRange, [G5:H65536]).Validation.Delete
Dim GPE As Range
If Not Intersect(Target, [G5:G65536]) Is Nothing And Target.Cells.Count = 1 Then
    Target.Validation.Add Type:=xlValidateList, Formula1:="=D5:D8"
    Exit Sub
End If
If Not Intersect(Target, [H5:H65536]) Is Nothing And Target.Cells.Count = 1 Then
Set GPE = [B:B].Find(what:=Target.Offset(, -1), Lookat:=xlWhole)
If GPE Is Nothing Then Exit Sub
If GPE = "" Then Exit Sub
Target.Validation.Add Type:=xlValidateList, Formula1:="=" & GPE.Offset(, 1).Resize(Application.WorksheetFunction.CountIf([B:B], Target.Offset(, -1))).Address
End If
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn xem cái này xem được không.
PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error Resume Next
Intersect(UsedRange, [G5:H65536]).Validation.Delete
Dim GPE As Range
If Not Intersect(Target, [G5:G65536]) Is Nothing And Target.Cells.Count = 1 Then
    Target.Validation.Add Type:=xlValidateList, Formula1:="=D5:D8"
    Exit Sub
End If
If Not Intersect(Target, [H5:H65536]) Is Nothing And Target.Cells.Count = 1 Then
Set GPE = [B:B].Find(what:=Target.Offset(, -1), Lookat:=xlWhole)
If GPE Is Nothing Then Exit Sub
If GPE = "" Then Exit Sub
Target.Validation.Add Type:=xlValidateList, Formula1:="=" & GPE.Offset(, 1).Resize(Application.WorksheetFunction.CountIf([B:B], Target.Offset(, -1))).Address
End If
End Sub
Nếu bạn dùng Find Method thì lưu ý 1 điểm rất quan trọng: Nếu vùng dử liệu (cột B và C) bắt đầu từ dòng 1 từ code sai ngay
 
Nếu bạn dùng Find Method thì lưu ý 1 điểm rất quan trọng: Nếu vùng dử liệu (cột B và C) bắt đầu từ dòng 1 từ code sai ngay
Dữ liệu phải có dòng tiêu đề chứ. Mà nếu muốn chắc ăn thì thêm tham số After vào phương thức Find
PHP:
Set GPE = [B:B].Find(what:=Target.Offset(, -1),After:=[B65536], Lookat:=xlWhole)
 
Dữ liệu phải có dòng tiêu đề chứ. Mà nếu muốn chắc ăn thì thêm tham số After vào phương thức Find
PHP:
Set GPE = [B:B].Find(what:=Target.Offset(, -1),After:=[B65536], Lookat:=xlWhole)
Cái này hỏng có quy định à nha!
Thay vì dùng Find, tôi chọn MATCH ---> Cam đoan với bạn MATCH nhanh hơn Find
 
Nguyên văn bởi huuthang_bd
Bạn xem cái này xem được không
Xin lỗi bạn, dù rất nôn nóng xem bài nhưng lu bu quá.
Cám ơn sự nhiệt tình của bạn, đã test code : chạy tốt ( trong vd giả lập trên )
Trong thực tế code của bạn chắc chắn sẽ phát sinh lỗi nếu người nhập liệu không tinh ý
--------

To: Chú NDU
Cám ơn chú rất nhiều về bài Form HoTroNhapLieu, bài này : Tuyệt vời
Chú lúc nào cũng thế: nhiệt tình, ..............................................dễ thương
( Đã xem qua from, vận dụng thì còn vướng, hỏi chú thì.................dễ thương quá :=\+ )

Thân chào 2 anh
 
To: Chú NDU
Cám ơn chú rất nhiều về bài Form HoTroNhapLieu, bài này : Tuyệt vời
Chú lúc nào cũng thế: nhiệt tình, ..............................................dễ thương
( Đã xem qua from, vận dụng thì còn vướng, hỏi chú thì.................dễ thương quá :=\+ )

Thân chào 2 anh
Đúng là tùy theo từng yêu cầu cụ thể mới có thể viết chính xác được anh à!
Anh đưa 1 file giả lập gần giống với file thật nhất + yêu cầu cụ thể ---> Em có thể giúp trong khả năng hiểu biết của mình
 
Hỏi thêm về cách lọc số

Như tôi đã nói, hình thức nhập liệu này nên dùng UserForm sẽ nhanh hơn mà chẳng bao giờ bị lổi
Từ bài này:
http://www.giaiphapexcel.com/forum/showpost.php?p=166134&postcount=10
Tôi xây dựng lại code, bỏ bớt 1 vài thứ không cần thiết

attachment.php


Xem file
---
Trong Form HoTroNhapLieu, Textbox dùng để lọc ký tự rất hay, trong thực tế áp dụng thì cần lọc số. Nếu được cảm phiền chú có thể viết thêm phần lọc số này được không ?
Cám ơn chú trước.
 
Web KT

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

Back
Top Bottom