Public Sub Test()
Dim Rng As Range, Cll As Range, Tem As String
ActiveSheet.Unprotect "123"
With Sheet1
End With
For Each Cll In Range("C1:C100")
With Range("A1:B100")
If Cll.Value = "" Then
.Cells(Cll.Row, 1).Resize(1, 2).Locked = False
Else
.Cells(Cll.Row, 1).Resize(1, 2).Locked = True
End If
End With
Next
Set Rng = Nothing
ActiveSheet.Protect "123"
End Sub
Dạ em cảm ơn ạ.Bạn sửa lại code chỗ tô đỏ xem thử nhé
Rich (BB code):Public Sub Test() Dim Rng As Range, Cll As Range, Tem As String ActiveSheet.Unprotect "123" With Sheet1 End With For Each Cll In Range("C1:C100") With Range("A1:B100") If Cll.Value = "" Then .Cells(Cll.Row, 1).Resize(1, 2).Locked = False Else .Cells(Cll.Row, 1).Resize(1, 2).Locked = True End If End With Next Set Rng = Nothing ActiveSheet.Protect "123" End Sub
Đọc bài này nè .....https://www.giaiphapexcel.com/diend...au-khi-nhập-liệu-ở-cột-b.160500/#post-1071574Nhưng hiện tại là nếu em chạy code trước, sau đó em thử nhập dữ liệu vào 1 ô bất kỳ trong cột C thì cột A và B không bị khóa, em phải vào code và chọn chạy lại mới có tác dụng ạ
Có 2 cách:Dạ em cảm ơn ạ.
Anh/chị cho em hỏi thêm với ạ. Em mong muốn là Code này sẽ chạy ngay khi cột C em nhập dữ liệu.
Nhưng hiện tại là nếu em chạy code trước, sau đó em thử nhập dữ liệu vào 1 ô bất kỳ trong cột C thì cột A và B không bị khóa, em phải vào code và chọn chạy lại mới có tác dụng ạ
Cái điều kiện này có vẻ mông lung khó hiểu này.nếu cột C không trống.
Dạ. Em cảm ơn ạ.Có 2 cách:
Cách 1: Tạo 1 nút ấn => điền dữ liệu chán rồi thì ấn nút để xét điều kiện cột C mà chuyển thuộc tính Locked ở cột A và B
Cách 2: Như Link tham khảo bài #4 Dùng sự kiện worksheet_change để bắt lấy sự kiện mỗi khi giá trị khi cột C thay đổi => lập tức chuyển thuộc tính Locked ở cột A và B ngay tức thì sau đó
Dạ, điều kiện của e chỉ là ô ở cột C mà k có dữ liệu thì cột A và B không khóa, cột C mà có dữ liệu bất kỳ thì cột A và B sẽ bị khóa ạCái điều kiện này có vẻ mông lung khó hiểu này.
Từng ô trong cột C không có dữ liệu hay chỉ cần 1 ô trong cột C có dữ liệu thì tính là có dữ liệu áDạ, điều kiện của e chỉ là ô ở cột C mà k có dữ liệu thì cột A và B không khóa, cột C mà có dữ liệu bất kỳ thì cột A và B sẽ bị khóa ạ
Từng ô của cột C a ạ, ví dụ C1 trống thì A1 và B1 đc điền, còn C1 mà có dữ liệu thì A1 và B1 bị khóa ạTừng ô trong cột C không có dữ liệu hay chỉ cần 1 ô trong cột C có dữ liệu thì tính là có dữ liệu á
Dạ, em cảm ơn anh nhiều ạ.Bạn xem thử file (code ở sheet1 chứ không phải ở module nhé)
Anh ơi, anh cho em hỏi chút ạ.Bạn xem thử file (code ở sheet1 chứ không phải ở module nhé)
Dạ em cảm ơn anh nhiều ạ. Tại em cũng chưa biết về VBA mà cũng k biết sử dụng công thức excel nào để làm được nên mới phải nhờ đến VBA. Sau có vẫn đề nào cần hỗ trợ em hy vọng vẫn được anh giúp đỡ.Ở đây mình chỉ biết 2 phương án:
Phương án 1:
- Bạn Unlocked toàn bộ sheet trước khi copy code qua và chạy
- Khi cột C thay đổi thì sẽ xem ô nào thay đổi và khác trống => tiến hành khóa tại cột A B tại dòng tương ứng
Phương án 2:
- Tự động quét toàn bộ cột C hoặc chỉ định 1 vùng cố định từ C1:C100 mỗi khi cột C thay đổi
- Như vậy nó sẽ đối chiếu lần lượt xem ô nào khác trống => khóa hoặc mở khóa cột A, B tại dòng tương ứng
File trên mình chọn cách 1 vì nó sẽ chạy nhanh hơn, cách 2 sẽ lâu hơn nhiều
=> Bạn làm thêm bước "Unlock toàn bộ sheet" là được nhé