Cách làm Không có ô trống trong: Data Validation...> settings...> list...> Source (1 người xem)

Liên hệ QC

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

thichthibup

Thành viên chính thức
Tham gia
17/7/13
Bài viết
62
Được thích
6
Nhờ anh chị giúp làm sao khi tạo nút bấm trong Data Validation...> settings...> list...> Source thì không hiện ô trống
Ví dụ cột A=
A
B

D
E

F
khi bấm sẽ hiện
A
B
D
E
F
cảm ơn
 
Xóa ô trống trong source thì sẽ không có ô trống trong list
 
Danh sách ở cột A1:A7 là cố định không thể xóa được 2 ô trống đó
Không xóa được trong source thì phải dùng source khác, và source đó không trống.
Tôi nói thế bởi vì không có cách nào loại ô trống trong Validation list, nếu source có ô trống. Source có ô trống phải xử lý source, hoặc dùng source khác đã xử lý.
 
Không xóa được trong source thì phải dùng source khác, và source đó không trống.
Tôi nói thế bởi vì không có cách nào loại ô trống trong Validation list, nếu source có ô trống. Source có ô trống phải xử lý source, hoặc dùng source khác đã xử lý.
Ý bạn là dùng source phụ, nhưng làm sao source phụ tự động thay đổi theo khi sỏuce chính thay đổi
----Trường hợp này khi dùng có:dữ liệu trùng nhau, trống rất khó chịu bạn nào bit xin giúp đỡ
 

File đính kèm

Thì bạn phải chuyển Source của Validation sang 1 chỗ khác và bỏ dòng trống đi thì mới được.

Bạn xem file đính kèm nhé.
Cảm ơn bạn, đã giúp tôi xử lí được 50%về trường hợp ô trống. Còn trường hợp trung ô trùng nhau bạn có cách nào ko, xin giúp đỡ
 
Cảm ơn bạn, đã giúp tôi xử lí được 50%về trường hợp ô trống. Còn trường hợp trung ô trùng nhau bạn có cách nào ko, xin giúp đỡ


Nếu dùng công thức thì phải qua công đoạn lọc duy nhất (không tính cell rổng) rồi chuyển sang vùng mới để làm list tạm
Nói chung: Công thức sẽ khiến cho file trở nên nặng nề nếu dữ liệu của bạn nhiều
Vậy: Bạn dùng giải pháp VBA đi cho nó khỏe
 
Nếu dùng công thức thì phải qua công đoạn lọc duy nhất (không tính cell rổng) rồi chuyển sang vùng mới để làm list tạm
Nói chung: Công thức sẽ khiến cho file trở nên nặng nề nếu dữ liệu của bạn nhiều
Vậy: Bạn dùng giải pháp VBA đi cho nó khỏe
Vâng ah, vậy ndu906081631 giúp tôi VBA như vậy nhé
Cảm ơn các bạn
 
Lần chỉnh sửa cuối:
Thích công thức thì có công thức cho bạn đây. Bạn xem file đính kèm nhé.
Cho em mượn tạm cái Valilist của anh mhung12005 nhé, bạn dùng công thức này cho H2 rùi làm List để chọn cũng được, hơi dài chút nhưng cũng là 1 cách.
PHP:
=IF(ISERROR(INDEX(Valilist,MATCH(1,INDEX((Valilist<>"")*(COUNTIF($H$1:H1,Valilist)=0),0),0))),"",INDEX(Valilist,MATCH(1,INDEX((Valilist<>"")*(COUNTIF($H$1:H1,Valilist)=0),0),0)))
 
Tặng bạn thêm 1 cách làm bằng VBA nữa. Bạn thêm cái gì gì đó vào cột A và xem Validation ở ô B1 nhé.
Cái này bạn giỡn chơi với thichthibup hay sao ah, thêm vào cột A nó lặng thinh mà
Hình như bạn gõ các Kí tự ở cột A vào validation...>list để đùa thichthibup ngớ ngẩn thì phải
 
Cái này bạn giỡn chơi với thichthibup hay sao ah, thêm vào cột A nó lặng thinh mà
Hình như bạn gõ các Kí tự ở cột A vào validation...>list để đùa thichthibup ngớ ngẩn thì phải

Người ta làm bằng code đàng hoàng chứ ngớ ngẩn gì
Có điều đồng chí mhung12005 làm sự kiện Worksheet_SelectionChange hơi buồn cười
Mã:
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
Tại sao phải chọn vào A1:A100 thì code mới chạy? Lý ra code sẽ chạy khi chọn vào B1 mới đúng chứ
 
Người ta làm bằng code đàng hoàng chứ ngớ ngẩn gì
Có điều đồng chí mhung12005 làm sự kiện Worksheet_SelectionChange hơi buồn cười
Mã:
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
Tại sao phải chọn vào A1:A100 thì code mới chạy? Lý ra code sẽ chạy khi chọn vào B1 mới đúng chứ
Không hiểu sao file này khi mở lên ko hề có đoạn code nào, nhờ các bác kiểm tra giúp; hơn nữa các file trước đây có code nhưng nay mở ra thì không thấy dòng code nào, mặc dù phai đó vẫn hoạt động bình thường
 

File đính kèm

Người ta làm bằng code đàng hoàng chứ ngớ ngẩn gì
Có điều đồng chí mhung12005 làm sự kiện Worksheet_SelectionChange hơi buồn cười
Mã:
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
Tại sao phải chọn vào A1:A100 thì code mới chạy? Lý ra code sẽ chạy khi chọn vào B1 mới đúng chứ
Em đang hiểu ý của anh mhung12005 là khi chọn và thêm dữ liệu vào vùng [A1:A100] code chạy luôn và cập nhật vào validation sư phụ ạ, hành động thêm dữ liệu trước, cũng hơi ngược ngược chút vì có phải lúc nào cũng thêm dữ liệu đâu mà tác động vào vùng A1:A100. hix! Có lẽ là anh ấy đang triển khai code theo hướng đó nên mới viết như vậy.

@COLACLAC : Không có code sao mà file hoạt động được theo yêu cầu của bạn, Code này không đặt trong module mà đặt trong sheet1, bạn mở file, bấm Alt+F11, click đúp vào sheet1(sheet1) ở cửa sổ bên trái để xem code nhé!
 
Lần chỉnh sửa cuối:
Em đang hiểu ý của anh mhung12005 là khi chọn và thêm dữ liệu vào vùng [A1:A100] code chạy luôn và cập nhật vào validation sư phụ ạ,
Nếu chọn hành động THÊM DỮ LIỆU thì cập nhật code. Vậy ta phải dùng sự kiện Change chứ sao lại SelectionChange.
SelectionChange là hành động dùng chuột click chổ này chổ nọ trên bảng tính... vậy tôi chỉ click chơi chơi trên cột A chứ hổng thay đổi dữ liệu gì mà code cũng chạy à? Vô lý
Suy nghĩ xem!
----------
Nếu là tôi thì tôi sẽ viết thế này:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Target.Address = "$B$1" Then
    arr = Range("A1:A10000").Value
    Set dic = CreateObject("Scripting.Dictionary")
    For Each Item In arr
      tmp = CStr(Item)
      If Len(tmp) Then
        If Not dic.Exists(tmp) Then dic.Add tmp, ""
      End If
    Next
    With Target.Validation
      .Delete
      If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
    End With
  End If
End Sub
 
Lần chỉnh sửa cuối:
Nếu chọn hành động THÊM DỮ LIỆU thì cập nhật code. Vậy ta phải dùng sự kiện Change chứ sao lại SelectionChange.
SelectionChange là hành động dùng chuột click chổ này chổ nọ trên bảng tính... vậy tôi chỉ click chơi chơi trên cột A chứ hổng thay đổi dữ liệu gì mà code cũng chạy à? Vô lý
Suy nghĩ xem!
----------
Nếu là tôi thì tôi sẽ viết thế này:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Target.Address = "$B$1" Then
    arr = Range("A1:A10000").Value
    Set dic = CreateObject("Scripting.Dictionary")
    For Each Item In arr
      tmp = CStr(Item)
      If Len(tmp) Then
        If Not dic.Exists(tmp) Then dic.Add tmp, ""
      End If
    Next
    With Target.Validation
      .Delete
      If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
    End With
  End If
End Sub

Đúng là ý em làm giống như Hoa còi nói sư phụ ạ. Và em nhớ nhầm, phải dùng sự kiện Change mới đúng Hihi. Em mới chỉ tập tành VBA mà.
Cảm ơn sư phụ và Hoa còi đã góp ý để rút kinh nghiệm.
 
Đặt validation nhiều nơi bằng cách dùng VBA

Nếu chọn hành động THÊM DỮ LIỆU thì cập nhật code. Vậy ta phải dùng sự kiện Change chứ sao lại SelectionChange.
SelectionChange là hành động dùng chuột click chổ này chổ nọ trên bảng tính... vậy tôi chỉ click chơi chơi trên cột A chứ hổng thay đổi dữ liệu gì mà code cũng chạy à? Vô lý
Suy nghĩ xem!
----------
Nếu là tôi thì tôi sẽ viết thế này:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Target.Address = "$B$1" Then
    arr = Range("A1:A10000").Value
    Set dic = CreateObject("Scripting.Dictionary")
    For Each Item In arr
      tmp = CStr(Item)
      If Len(tmp) Then
        If Not dic.Exists(tmp) Then dic.Add tmp, ""
      End If
    Next
    With Target.Validation
      .Delete
      If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
    End With
  End If
End Sub
Chào thầy ndu96081631, em muốn đăt validation tại nhiều ô như :Tại sheet2 em muốn đặt Validation vào các cột B;D;F;H;J với kết quả giống như ở Ô (B1) sheet1;THÌ CÓ CÁC NÀO LÀM KHÔNG ???
 

File đính kèm

Chào thầy ndu96081631, em muốn đăt validation tại nhiều ô như :Tại sheet2 em muốn đặt Validation vào các cột B;D;F;H;J với kết quả giống như ở Ô (B1) sheet1;THÌ CÓ CÁC NÀO LÀM KHÔNG ???

anh NDU chắc là đi hội đàm với anh Bill ùi, mình trả lời cho bạn nha
bạn nhấn phím Alt F11-->chọn sheet1 bạn sẻ thấy đoạn code sau

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cll As Range, Rng As Range
Dim Dic As Object
Set Rng = Sheet1.Range(Sheet1.[A1], Sheet1.[A65000].End(xlUp))
Set Dic = CreateObject("Scripting.Dictionary")
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
On Error Resume Next
For Each Cll In Rng
If Cll <> "" Then Dic.Add Cll.Value, ""
Next Cll
With Sheet1.[B1].Validation
.Delete
.Add 3, , , Join(Dic.Keys, ",")
.ShowError = False
End With

End If
End Sub

--->đoạn code màu đỏ đó là quy định nơi để validation list tại B1--->vậy muốn làm ở sheet2 chắc bạn biết cách sửa rùi hén.

nhân tiện giới thiệu với bạn thêm một cách làm bằng công thức
đọc cho vui hén..................
 

File đính kèm

anh NDU chắc là đi hội đàm với anh Bill ùi, mình trả lời cho bạn nha
bạn nhấn phím Alt F11-->chọn sheet1 bạn sẻ thấy đoạn code sau

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cll As Range, Rng As Range
Dim Dic As Object
Set Rng = Sheet1.Range(Sheet1.[A1], Sheet1.[A65000].End(xlUp))
Set Dic = CreateObject("Scripting.Dictionary")
If Not Intersect(Range("A1:A100"), Target) Is Nothing Then
On Error Resume Next
For Each Cll In Rng
If Cll <> "" Then Dic.Add Cll.Value, ""
Next Cll
With Sheet1.[B1].Validation
.Delete
.Add 3, , , Join(Dic.Keys, ",")
.ShowError = False
End With

End If
End Sub

--->đoạn code màu đỏ đó là quy định nơi để validation list tại B1--->vậy muốn làm ở sheet2 chắc bạn biết cách sửa rùi hén.

nhân tiện giới thiệu với bạn thêm một cách làm bằng công thức
đọc cho vui hén..................
Cảm ơn bạn, nhưng tôi vẫn chưa biết cách: sau khi copy code vào rồi, làm sao cho code chạy tại ô B1 ah
 
Chủ thớt hạn chế dùng nick ảo nhé!
 
Chào thầy ndu96081631, em muốn đăt validation tại nhiều ô như :Tại sheet2 em muốn đặt Validation vào các cột B;D;F;H;J với kết quả giống như ở Ô (B1) sheet1;THÌ CÓ CÁC NÀO LÀM KHÔNG ???

Code tại sheet2 là:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Not Intersect(Union([B][COLOR=#ff0000][B1:B20], [D1:D20], [F1:F20], [H1:H20], [J1:J20][/COLOR][/B]), Target) Is Nothing Then
    If Target.Count = 1 Then
      arr = Sheet1.Range("A1:A10000").Value
      Set dic = CreateObject("Scripting.Dictionary")
      For Each Item In arr
        tmp = CStr(Item)
        If Len(tmp) Then
          If Not dic.Exists(tmp) Then dic.Add tmp, ""
        End If
      Next
      With Target.Validation
        .Delete
        If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
      End With
    End If
  End If
End Sub
Chổ màu đỏ là chổ bạn quy định vị trí chứa validation. Ở đây tôi cho code tác dụng từ dòng 1 đến dòng 20 ---> Vậy thay đổi thế nào tùy bạn
---------------------------------------
anh NDU chắc là đi hội đàm với anh Bill ùi, mình trả lời cho bạn nha
bạn nhấn phím Alt F11-->chọn sheet1 bạn sẻ thấy đoạn code sau

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'................................
With Sheet1.[B1].Validation
.Delete
.Add 3, , , Join(Dic.Keys, ",")
.ShowError = False
End With

End If
End Sub

--->đoạn code màu đỏ đó là quy định nơi để validation list tại B1--->vậy muốn làm ở sheet2 chắc bạn biết cách sửa rùi hén.
Không đơn giản vậy đâu. Vì điều đầu tiên là phải giới hạn Target thuộc vùng nào (để khi chọn vào đó thì code mới chạy)... Vây nên câu lệnh bắt buộc đầu tiên phải là:
If Not Intersect(Vùng dữ liệu, Target) is nothing then
Trong đó Vùng dữ liệu chính là vị trí bạn đặt validation
--------------------
Cảm ơn bạn, nhưng tôi vẫn chưa biết cách: sau khi copy code vào rồi, làm sao cho code chạy tại ô B1 ah
Đây là code SỰ KIỆN, thành ra bạn khỏi cần phải làm gì cả (đương nhiên phải Enable Macros) chi cần đặt chuột vào vùng ta định sẵn (như trong file của tôi là vùng màu vàng) thì code tự động chạy
 

File đính kèm

Lần chỉnh sửa cuối:
---------------------------------------

Không đơn giản vậy đâu. Vì điều đầu tiên là phải giới hạn Target thuộc vùng nào (để khi chọn vào đó thì code mới chạy)... Vây nên câu lệnh bắt buộc đầu tiên phải là:
If Not Intersect(Vùng dữ liệu, Target) is nothing then
Trong đó Vùng dữ liệu chính là vị trí bạn đặt validation
--------------------


chắc tại hiểu sai ý của đoạn code bài #21,
theo tôi hiểu được là như vậy : là khi di chuyển trong A1:A1000 của sheet1 thì nó sẻ nạp data cho validation list
rồi đặt cái drop list này tại B1
bây giờ muốn để chổ khác thì chỉ cần sửa lại địa chỉ của B1 là xong, và tôi làm đoạn code thay thế đoạn code màu đỏ trên như sau

With Application.Union(Sheet2.[b1:b2], Sheet2.[d1:d20], Sheet2.[f1:f20], Sheet2.[h1:h20], Sheet2.[i1:i20]).Validation
.Delete
.Add 3, , , Join(Dic.Keys, ",")
.Validation.ShowError = False
End With

và thấy nó cũng chạy được, nên mới xúi bạn ấy đó chứ...............hihihì

p/s: ah, đã hiểu rồi, code trong file đính kèm ko phải là đoạn code mà chủ thớt trích dẫn (tôi theo đoạn code trong file)
 
Lần chỉnh sửa cuối:
chắc tại hiểu sai ý của đoạn code bài #21,
theo tôi hiểu được là như vậy : là khi di chuyển trong A1:A1000 của sheet1 thì nó sẻ nạp data cho validation list
rồi đặt cái drop list này tại B1
bây giờ muốn để chổ khác thì chỉ cần sửa lại địa chỉ của B1 là xong, và tôi làm đoạn code thay thế đoạn code màu đỏ trên như sau

With Application.Union(Sheet2.[b1:b2], Sheet2.[d1:d20], Sheet2.[f1:f20], Sheet2.[h1:h20], Sheet2.[i1:i20]).Validation
.Delete
.Add 3, , , Join(Dic.Keys, ",")
.Validation.ShowError = False
End With

và thấy nó cũng chạy được, nên mới xúi bạn ấy đó chứ...............hihihì
Như tôi đã đề cập từ mấy bài trước thì code mà bạn vừa nói đang dùng sai sự kiện nên dù có chạy được nhưng chưa tối ưu
Tóm lại:
- Nếu muốn code chạy khi thay đổi vùng A1:A1000 thì phải dùng sự kiện Worksheet_Change
- Nếu muốn code chạy khi chọn vào B1 (cell chứa validation) thì phải dùng sự kiện Worksheet_SelectionChange
Bài 19 tôi đã sửa lại rồi còn gì
 
Cảm ơn các Bác ndu96081631;nhapmon cac bác quá tài quá tài, chúc các bác sức khỏe hạnh phúc
 
Xin phép cho thầy em xin trích dẫn lại code này chút ah
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Not Intersect(Union([COLOR=#ff0000][B][B1:B60], [D1:D60], [F1:F60], [H1:H60], [J1:J60][/B][/COLOR],[COLOR=#0000cd] [B][L1:L60], [N1:N60], [P1:P60], [R1:R60], [T1:T60], [V1:V60], [X1:X60], [Z1:Z60], [AB1:AB60], [AD1:AD60], [AF1:AF60], [AH1:AH60], [AJ1:AJ60], [AL1:AL60], [AN1:AN60], [AP1:AP60], [AR1:AR60], [AT1:AT60], [AV1:AV60], [AX1:AX60], [AZ1:AZ60], [BB1:BB60], [BD1:BD60], [BF1:BF60], [BH1:BH60], [BJ1:BJ60], [BL1:BL60], [BN1:BN60], [BP1:BP60], [BR1:BR60], [BT1:BT60][/B][/COLOR]), Target) Is Nothing Then
    If Target.Count = 1 Then
      arr = Sheet1.Range("A1:A10000").Value
      Set dic = CreateObject("Scripting.Dictionary")
      For Each Item In arr
        tmp = CStr(Item)
        If Len(tmp) Then
          If Not dic.Exists(tmp) Then dic.Add tmp, ""
        End If
      Next
      With Target.Validation
        .Delete
        If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
      End With
    End If
  End If
End Sub
Chổ màu đỏ là chổ bạn quy định vị trí chứa validation. Ở đây tôi cho code tác dụng từ dòng 1 đến dòng 20 ---> Vậy thay đổi thế nào tùy bạn[/QUOTE]
Kính gửi thầy ndu96081631 và các anh chị, trong code ở trên Chổ màu đỏ là chổ quy định vị trí chứa validation chỉ có ở B,D,F,H,J
*nhưng
khi sử dụng có vấn đề nảy sinh là số cột chứa validation rất nhiều,
*nên tôi đã viết thêm các cột mầu xanh đậm vào code thì bị lỗi nhưng lại ko biết lỗi gì. Vậy nhờ các anh chị giúp em với ah
Cảm ơn các anh chị
----------
 
Lần chỉnh sửa cuối:
Kính gửi bác ndu và các anh chị, trong Bài #26 ở trên Chổ màu đỏ là chổ quy định vị trí chứa validation chỉ có ở B,D,F,H,J nhưng khi sử dụng có vấn đề nảy sinh là số cột chứa validation rất nhiều, nếu viết tên tát cả các cột vào code thì mất rất nhiều thời gian. Vậy các anh chị có cách nào cải thiện được vấn đề này giúp em với ah
Cảm ơn anh chị
----------

Không viết tên cột vào chỗ này cũng phải viết vào chỗ khác, máy tính mà nghe được cũng phải đọc hết cho nó nghe. Ai đó có thể viết 1 đoạn code cho bạn dùng chuột chọn cột, thì cũng phải chọn lần lượt từng ấy cột. Trừ khi tạo ra máy tính có khả năng đọc ý nghĩ, nhưng nghĩ nhầm nó cũng xử lý nhầm như thường.
 
Không viết tên cột vào chỗ này cũng phải viết vào chỗ khác, máy tính mà nghe được cũng phải đọc hết cho nó nghe. Ai đó có thể viết 1 đoạn code cho bạn dùng chuột chọn cột, thì cũng phải chọn lần lượt từng ấy cột. Trừ khi tạo ra máy tính có khả năng đọc ý nghĩ, nhưng nghĩ nhầm nó cũng xử lý nhầm như thường.
Bạn nói đúng rồi, nhưng tôi nghĩ là có giải pháp nào không thôi mà??? Cảm ơn ptm có lẽ tôi lại nhiều chuyện rùi
 
Nhờ các anh chị coi giúp em đoạn code bị lỗi sau khi thêm vùng chứa validation ở #30.
Em cảm ơn các anh chị!
 
Thì bạn phải chuyển Source của Validation sang 1 chỗ khác và bỏ dòng trống đi thì mới được.

Bạn xem file đính kèm nhé.

Bạn ơi cho tớ hỏi sao không thấy code của bạn trong file đính kèm nhỉ?
Để mình áp dụng vào file của mình.

Thanks
Khoi
 
Bạn ơi cho tớ hỏi sao không thấy code của bạn trong file đính kèm nhỉ?
Để mình áp dụng vào file của mình.

Thanks
Khoi
Bạn nhấn Ctrl+F3 và nghiên cứu mấy cái Name trong đó chứ file này có dùng code chi đâu mà bạn thấy được.
 
Code tại sheet2 là:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Not Intersect(Union([B][COLOR=#ff0000][B1:B20], [D1:D20], [F1:F20], [H1:H20], [J1:J20][/COLOR][/B]), Target) Is Nothing Then
    If Target.Count = 1 Then
      arr = Sheet1.Range("A1:A10000").Value
      Set dic = CreateObject("Scripting.Dictionary")
      For Each Item In arr
        tmp = CStr(Item)
        If Len(tmp) Then
          If Not dic.Exists(tmp) Then dic.Add tmp, ""
        End If
      Next
      With Target.Validation
        .Delete
        If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
      End With
    End If
  End If
End Sub
Chổ màu đỏ là chổ bạn quy định vị trí chứa validation. Ở đây tôi cho code tác dụng từ dòng 1 đến dòng 20 ---> Vậy thay đổi thế nào tùy bạn
---------------------------------------

Không đơn giản vậy đâu. Vì điều đầu tiên là phải giới hạn Target thuộc vùng nào (để khi chọn vào đó thì code mới chạy)... Vây nên câu lệnh bắt buộc đầu tiên phải là:
If Not Intersect(Vùng dữ liệu, Target) is nothing then
Trong đó Vùng dữ liệu chính là vị trí bạn đặt validation
--------------------

Đây là code SỰ KIỆN, thành ra bạn khỏi cần phải làm gì cả (đương nhiên phải Enable Macros) chi cần đặt chuột vào vùng ta định sẵn (như trong file của tôi là vùng màu vàng) thì code tự động chạy
Thầy cho em hỏi như code của thày thì em đã áp dung cho 1 vùng dữ liệu để ra nhiều vùng chưa Valadation, nay em muốn làm sao để cho mõi vùng nguồn dữ liệu, sẽ cho ra 1 vùng chứa Valadation. nếu vậy thì phải chỉnh code lại như thế nào, nhờ thầy giúp
 

File đính kèm

Code tại sheet2 là:
Mã:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Dim arr, Item, dic As Object, tmp As String
  On Error Resume Next
  If Not Intersect(Union([B][COLOR=#ff0000][B1:B20], [D1:D20], [F1:F20], [H1:H20], [J1:J20][/COLOR][/B]), Target) Is Nothing Then
    If Target.Count = 1 Then
      arr = Sheet1.Range("A1:A10000").Value
      Set dic = CreateObject("Scripting.Dictionary")
      For Each Item In arr
        tmp = CStr(Item)
        If Len(tmp) Then
          If Not dic.Exists(tmp) Then dic.Add tmp, ""
        End If
      Next
      With Target.Validation
        .Delete
        If dic.Count Then .Add 3, , , Join(dic.Keys, ",")
      End With
    End If
  End If
End Sub
Chổ màu đỏ là chổ bạn quy định vị trí chứa validation. Ở đây tôi cho code tác dụng từ dòng 1 đến dòng 20 ---> Vậy thay đổi thế nào tùy bạn
---------------------------------------

Không đơn giản vậy đâu. Vì điều đầu tiên là phải giới hạn Target thuộc vùng nào (để khi chọn vào đó thì code mới chạy)... Vây nên câu lệnh bắt buộc đầu tiên phải là:
If Not Intersect(Vùng dữ liệu, Target) is nothing then
Trong đó Vùng dữ liệu chính là vị trí bạn đặt validation
--------------------

Đây là code SỰ KIỆN, thành ra bạn khỏi cần phải làm gì cả (đương nhiên phải Enable Macros) chi cần đặt chuột vào vùng ta định sẵn (như trong file của tôi là vùng màu vàng) thì code tự động chạy
thầy cho em hỏi nếu chỉ muốn dùng 1 ô chưa validation ở sheet 2 thì phải sửa lại code như nào ạ.
 
Chào các thầy, em sử dụng cách giống như ndu96081631 nhưng bị lỗi file, không biết có ai đã làm được theo cách này chưa ạ ?
 

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

Back
Top Bottom