Code VBA để khóa ô có điều kiện

Liên hệ QC

Hrtrangia

Thành viên mới
Tham gia
20/5/22
Bài viết
7
Được thích
1
Em chào các anh/chị,

Em xin nhờ các anh/chị chỉ giúp em mã code để khóa cột A và B nếu cột C không trống.
Em viết code mà nó không ra như ý muốn ạ.

Em xin gửi file đính kèm ạ.

Rất mong sự hỗ trợ của các anh/chị.

Em cảm ơn ạ.
 

File đính kèm

  • Book1.xlsm
    16.2 KB · Đọc: 64
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
 
Upvote 0
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
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 ạ :(
 
Upvote 0
Upvote 0
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ó 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 đó
 
Upvote 0
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ạ. Em cảm ơn ạ.
Cách 1: Không khả thì với em cho lắm vì em cần chia sẻ file để m.n cũng vào làm. Nếu theo cách này thì em cần thường xuyên tương tác với file đó ạ.
Cách 2:
Public Sub Test()
Application.ScreenUpdating = False
Application.EnableEvents = False
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
Application.EnableEvents = True
ActiveSheet.Protect "123"
Application.ScreenUpdating = True
End Sub
Có phải code như này không ạ? Em test nó vẫn không được ạ :(
Bài đã được tự động gộp:

Cái điều kiện này có vẻ mông lung khó hiểu này.
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 ạ
 
Upvote 0
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 ô 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 á
 
Upvote 0
Bạn xem thử file (code ở sheet1 chứ không phải ở module nhé)
 

File đính kèm

  • Book1.xlsm
    15.6 KB · Đọc: 25
Upvote 0
Bạn xem thử file (code ở sheet1 chứ không phải ở module nhé)
Anh ơi, anh cho em hỏi chút ạ.

Tại sao vẫn là code trong file này mà em copy vào 1 file mới thì nó k chạy được như ý muốn ạ. Thay vì chỉ khóa dòng mà cột C có dữ liệu thì nó khóa tất cả ô trong sheet đó luôn ạ. Em có thử tạo file mới như đính kèm.
Anh xem giúp em với ạ.

Em cảm ơn anh ạ.
 

File đính kèm

  • Book2.xlsm
    14.2 KB · Đọc: 10
Upvote 0
Ở đâ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é
 
Upvote 0
Ở đâ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é
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 đỡ.

Em cảm ơn anh ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom