Protect khi nhập xong một ô dữ liệu

  • Thread starter Thread starter lq177
  • Ngày gửi Ngày gửi
Liên hệ QC

lq177

Thành viên thường trực
Tham gia
22/4/10
Bài viết
203
Được thích
112
Tôi có một vấn đề xin được hỏi diễn đàn.
Tôi có một cột dữ liệu hàng ngày phải nhập vào
Tôi muốn khi tôi nhập dữ liệu vào đến đâu thì cell đó sau khi nhập xong sẽ được Protect lại với một pass vào đó mình đặt trước, sau khi nhập xong muốn sửa lại thì phải mở khóa.
Chỉ cell nào chứa dữ liệu trong vùng chọn trước thì bị khóa, còn lại vẫn bình thường.
 
Tôi có một vấn đề xin được hỏi diễn đàn.
Tôi có một cột dữ liệu hàng ngày phải nhập vào
Tôi muốn khi tôi nhập dữ liệu vào đến đâu thì cell đó sau khi nhập xong sẽ được Protect lại với một pass vào đó mình đặt trước, sau khi nhập xong muốn sửa lại thì phải mở khóa.
Chỉ cell nào chứa dữ liệu trong vùng chọn trước thì bị khóa, còn lại vẫn bình thường.
Bạn tham khảo topic sau nhé: khoá dữ liệu sau khi nhập vào excel (tự động khoá)
 
Upvote 0
Tôi có một vấn đề xin được hỏi diễn đàn.
Tôi có một cột dữ liệu hàng ngày phải nhập vào
Tôi muốn khi tôi nhập dữ liệu vào đến đâu thì cell đó sau khi nhập xong sẽ được Protect lại với một pass vào đó mình đặt trước, sau khi nhập xong muốn sửa lại thì phải mở khóa.
Chỉ cell nào chứa dữ liệu trong vùng chọn trước thì bị khóa, còn lại vẫn bình thường.
bạn vào tools/prote..allow uer../new/bạn chọn những cell nào cần chứa dữ liệu khóa đăt pass rồi bấm ok
Và bạn tiếp tục chọn những khối cell không cần khóa thì bạn vẫn chọn new không đăt pass rồi ok
Sau khi bạn bấm ok thì trên bảng xuất hiện 02 vùng bạn đã chọn.Bạn lick chuột vào prote… đặt pass rồi ok là được
Chúc bạn thành công
 
Upvote 0
Cám ơn bạn nhé, Cell mình nhập xong nó sẽ khóa lại
nhưng mình xóa dữ liệu đi cell đó vẫn bị khóa
Mình cần là: Nhập xong thì khóa, nếu không cần nữa thì mở khóa, xóa đi và cell đó không bị khóa nữa
Tức là dữ liệu ="" thì không bị khóa, còn <>"" sẽ bị khóa.
 
Upvote 0
bạn vào tools/prote..allow uer../new/bạn chọn những cell nào cần chứa dữ liệu khóa đăt pass rồi bấm ok
Và bạn tiếp tục chọn những khối cell không cần khóa thì bạn vẫn chọn new không đăt pass rồi ok
Sau khi bạn bấm ok thì trên bảng xuất hiện 02 vùng bạn đã chọn.Bạn lick chuột vào prote… đặt pass rồi ok là được
Chúc bạn thành công
Cám ơn bạn, mình cần là tự động cơ, giúp mình nhé.
 
Upvote 0
Cám ơn bạn nhé, Cell mình nhập xong nó sẽ khóa lại
nhưng mình xóa dữ liệu đi cell đó vẫn bị khóa
Mình cần là: Nhập xong thì khóa, nếu không cần nữa thì mở khóa, xóa đi và cell đó không bị khóa nữa
Tức là dữ liệu ="" thì không bị khóa, còn <>"" sẽ bị khóa.
Cái này thì cần đến VBa bạn ạ
 
Upvote 0
Đúng rồi, mình gửi bài ở mục Lập trình với excel mà.

Bài này làm như vầy:

1) Chọn sheet cần khóa, sau đó phủ khối toàn bộ sheet (Ctrl+A), chọn Format Cells (Ctrl+1). Chọn thẻ Protection, bỏ chọn Locked.

2) Phủ khối vùng cần Protect, cũng lại Ctrl+1, chọn lại Locked

3) Chọn 1 ô để đặt điều kiện "Khóa, Mở Khóa"

4) Viết code trên sheet đó:

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$J$1" Then
    If Target.Value = "Khóa" Then
      ActiveSheet.Protect ("GPE")
    Else
      ActiveSheet.Unprotect ("GPE")
    End If
  End If
End Sub

5) Xem file tham khảo!
 

File đính kèm

Upvote 0
Bài này làm như vầy:

1) Chọn sheet cần khóa, sau đó phủ khối toàn bộ sheet (Ctrl+A), chọn Format Cells (Ctrl+1). Chọn thẻ Protection, bỏ chọn Locked.

2) Phủ khối vùng cần Protect, cũng lại Ctrl+1, chọn lại Locked

3) Chọn 1 ô để đặt điều kiện "Khóa, Mở Khóa"

4) Viết code trên sheet đó:

PHP:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Address = "$J$1" Then
    If Target.Value = "Khóa" Then
      ActiveSheet.Protect ("GPE")
    Else
      ActiveSheet.Unprotect ("GPE")
    End If
  End If
End Sub

5) Xem file tham khảo!
Cám ơn bạn đã trả lời, bạn hiểu sai ý của mình rồi, bài của bạn nghiaphuc đã gần đúng ý của mình rồi, vấn đề là sau khi sửa lại dữ liệu ="" thì cell đó vẫn bị khóa, mình muốn nó không bị khóa nữa
Các bạn xem file rồi giúp mình nhé.
 

File đính kèm

Upvote 0
Cám ơn bạn đã trả lời, bạn hiểu sai ý của mình rồi, bài của bạn nghiaphuc đã gần đúng ý của mình rồi, vấn đề là sau khi sửa lại dữ liệu ="" thì cell đó vẫn bị khóa, mình muốn nó không bị khóa nữa
Các bạn xem file rồi giúp mình nhé.

Vậy tôi hỏi bạn, nếu muốn xóa ô nào đó, có phải bạn vẫn mở khóa trước rồi mới xóa không? Làm gì có ô nào đang khóa mà bạn xóa được?
 
Upvote 0
Vậy tôi hỏi bạn, nếu muốn xóa ô nào đó, có phải bạn vẫn mở khóa trước rồi mới xóa không? Làm gì có ô nào đang khóa mà bạn xóa được?
Tôi có nói là đang khóa mà vẫn xóa được đâu chứ?
Tôi nói ý muốn của tui, Mở khóa, xóa và cell đó không bị Protect nữa khi không còn dữ liệu
 
Upvote 0
Tôi có nói là đang khóa mà vẫn xóa được đâu chứ?
Tôi nói ý muốn của tui, Mở khóa, xóa và cell đó không bị Protect nữa khi không còn dữ liệu
Vậy thì bạn dùng code này nhé:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    ActiveSheet.Unprotect "GPE"
    For Each Cll In Target.Cells
        Cll.Locked = (Cll <> "")
    Next
    ActiveSheet.Protect "GPE"
End Sub
 

File đính kèm

Upvote 0
Vậy thì bạn dùng code này nhé:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll As Range
    ActiveSheet.Unprotect "GPE"
    For Each Cll In Target.Cells
        Cll.Locked = (Cll <> "")
    Next
    ActiveSheet.Protect "GPE"
End Sub
Mình có thể giới hạn nó trong 1 hoặc 2 cột được không bạn
Ví dụ: Cột A:A và B:B
 
Upvote 0
Mình có thể giới hạn nó trong 1 hoặc 2 cột được không bạn
Ví dụ: Cột A:A và B:B

Bạn chỉ cần thêm cái này vào là giới hạn 2 cột đó: If Target.Column > 2 Then Exit Sub

Code bây giờ là:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 2 Then Exit Sub
    Dim Cll As Range
    ActiveSheet.Unprotect "GPE"
    For Each Cll In Target.Cells
        Cll.Locked = (Cll <> "")
    Next
    ActiveSheet.Protect "GPE"
End Sub
 
Upvote 0
Bạn chỉ cần thêm cái này vào là giới hạn 2 cột đó: If Target.Column > 2 Then Exit Sub

Code bây giờ là:

PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 2 Then Exit Sub
    Dim Cll As Range
    ActiveSheet.Unprotect "GPE"
    For Each Cll In Target.Cells
        Cll.Locked = (Cll <> "")
    Next
    ActiveSheet.Protect "GPE"
End Sub
Hình như không được bạn à, bạn làm cho mình tại Cột B:B và C:C nhé
 
Upvote 0
Hình như không được bạn à, bạn làm cho mình tại Cột B:B và C:C nhé

Bạn thật là! Nói giới hạn cột A:B thì làm như vậy, còn qua B:C thì phải chỉnh lại chứ!

Thay cái đó bằng cái này:

If Target.Column < 2 Or Target.Column > 3 Then Exit Sub
 
Upvote 0
Xin hỏi vậy Khi bấm nút "Save" Sheet tự động khóa thì phải dùng code nào ạ!
 
Upvote 0
Xin hỏi vậy Khi bấm nút "Save" Sheet tự động khóa thì phải dùng code nào ạ!
Bạn dùng code này cho đối tượng ThisWorkbook nhé:
PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Sheets("Sheet1").Protect "GPE"
End Sub
 
Upvote 0
Bạn dùng code này cho đối tượng ThisWorkbook nhé:
PHP:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Sheets("Sheet1").Protect "GPE"
End Sub
hj`! lại là thầy! Lâu rồi em không online thầy vẫn khỏe chứ!
Xin hỏi thầy code trên nếu áp dụng cho tất cả các sheet trong wordbook thì thay
Sheets("Sheet1").Protect "GPE"=This wordbook.Protect "GPE" thể này ạ!
Em thử không được. phiền thầy chỉnh cho em.
 
Upvote 0
Web KT

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

Back
Top Bottom