Khóa từng ô dữ liệu sau khi nhập (1 người xem)

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

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

toanxn

Thành viên mới
Tham gia
15/5/14
Bài viết
24
Được thích
5
Kính Chào Anh / Chị!
Nhờ Anh/Chị hỗ trợ giúp em về công thức VBA, cách khóa tự động dữ liệu của ô đã nhập và cho phép sửa nhưng phải có pass. Em có làm 1 file đính kèm.
Rất mong nhận được sự giúp đỡ của Anh/Chị, em mới tập tành làm VBA nên mong cách Anh/Chị chỉ giáo nhiệt tình.
Trân trọng cảm ơn!
 

File đính kèm

Kính Chào Anh / Chị!
Nhờ Anh/Chị hỗ trợ giúp em về công thức VBA, cách khóa tự động dữ liệu của ô đã nhập và cho phép sửa nhưng phải có pass. Em có làm 1 file đính kèm.
Rất mong nhận được sự giúp đỡ của Anh/Chị, em mới tập tành làm VBA nên mong cách Anh/Chị chỉ giáo nhiệt tình.
Trân trọng cảm ơn!
Bạn thử xem đúng ý chưa nhé, bạn tự thay đổi mật khẩu tùy ý trong code mặc định là 123
Mã:
Dim mRg As Range
Dim mStr As String
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRg As Range
   Application.ScreenUpdating = False
    On Error Resume Next
    Set xRg = Intersect(Range("A1:M2000"), Target)
    If xRg Is Nothing Then Exit Sub
    Target.Worksheet.Unprotect Password:="123"
    If xRg.Value <> mStr Then xRg.Locked = True
    Target.Worksheet.Protect Password:="123"
    Application.ScreenUpdating = True
End Sub
 

File đính kèm

Bạn thử xem đúng ý chưa nhé, bạn tự thay đổi mật khẩu tùy ý trong code mặc định là 123
Mã:
Dim mRg As Range
Dim mStr As String
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRg As Range
   Application.ScreenUpdating = False
    On Error Resume Next
    Set xRg = Intersect(Range("A1:M2000"), Target)
    If xRg Is Nothing Then Exit Sub
    Target.Worksheet.Unprotect Password:="123"
    If xRg.Value <> mStr Then xRg.Locked = True
    Target.Worksheet.Protect Password:="123"
    Application.ScreenUpdating = True
End Sub
Chào Anh!
Cảm ơn anh đã giúp đỡ, tuy nhiên khi nhập A1 thì B1, C1 cũng bị lock lại. Có cách nào cho nó chỉ khóa 1 ô mình vừa nhập không ạ.
Cảm ơn a đã phản hồi!
 
Chọn vùng A2:M28 Format Cells > Protection > bỏ chọn Locked
Protect với pass 123
Sử dụng code sau:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:M28")) Is Nothing Then
    If Target.Count = 1 And Target <> "" Then
        Unprotect "123"
        Target.Locked = True
        Protect "123"
    End If
End If
End Sub
 

File đính kèm

Là chỉ khóa cột A,B,G hay sao bạn?
cảm ơn bác đã nhiệt tình giúp đỡ.
- thứ nhất Em cần tất cả khu vực từ A đến M đều được khóa nhưng với điều kiện phải có số liệu nhập vào đó rồi mới thực thi lệnh khóa.
- Thứ hai Ô ở vị trí A và vị trí G sẽ tự động cập nhập khi phát sinh câu lệnh ở ô B (như file em đã gởi đính kèm ạ).
Em mới làm quen với VBA nên em cũng chưa hiểu được hết nhờ Anh hỗ trợ ạ.
trân trọng!
Bài đã được tự động gộp:

Chọn vùng A2:M28 Format Cells > Protection > bỏ chọn Locked
Protect với pass 123
Sử dụng code sau:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:M28")) Is Nothing Then
    If Target.Count = 1 And Target <> "" Then
        Unprotect "123"
        Target.Locked = True
        Protect "123"
    End If
End If
End Sub
cảm ơn bác đã nhiệt tình giúp đỡ.
- thứ nhất Em cần tất cả khu vực từ A đến M đều được khóa nhưng với điều kiện phải có số liệu nhập vào đó rồi mới thực thi lệnh khóa.
- Thứ hai Ô ở vị trí A và vị trí G sẽ tự động cập nhập khi phát sinh câu lệnh ở ô B (như file em đã gởi đính kèm ạ).
Em mới làm quen với VBA nên em cũng chưa hiểu được hết nhờ Anh hỗ trợ ạ.
trân trọng!
 

File đính kèm

Lần chỉnh sửa cuối:
cảm ơn bác đã nhiệt tình giúp đỡ.
- thứ nhất Em cần tất cả khu vực từ A đến M đều được khóa nhưng với điều kiện phải có số liệu nhập vào đó rồi mới thực thi lệnh khóa.
- Thứ hai Ô ở vị trí A và vị trí G sẽ tự động cập nhập khi phát sinh câu lệnh ở ô B (như file em đã gởi đính kèm ạ).
Em mới làm quen với VBA nên em cũng chưa hiểu được hết nhờ Anh hỗ trợ ạ.
trân trọng!
Bài đã được tự động gộp:


cảm ơn bác đã nhiệt tình giúp đỡ.
- thứ nhất Em cần tất cả khu vực từ A đến M đều được khóa nhưng với điều kiện phải có số liệu nhập vào đó rồi mới thực thi lệnh khóa.
- Thứ hai Ô ở vị trí A và vị trí G sẽ tự động cập nhập khi phát sinh câu lệnh ở ô B (như file em đã gởi đính kèm ạ).
Em mới làm quen với VBA nên em cũng chưa hiểu được hết nhờ Anh hỗ trợ ạ.
trân trọng!
Bạn test thử code sau đã đúng chưa:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union([A2:F28], [H2:M28])) Is Nothing Then
    If Target.Count = 1 And Target.Value <> "" Then
        Unprotect "123"
        Target.Locked = True
        If Target.Column = 2 Then
            Target.Offset(, -1) = Target.Offset(, -1) + 1
            Target.Offset(, 5) = Now
        End If
        Protect "123"
    End If
End If
End Sub
Lưu ý: G2:G28 cần Locked (Thao tác: chọn G2:G28 > Format Cells > Protection > chọn Locked > OK.
 

File đính kèm

Bạn test thử code sau đã đúng chưa:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Union([A2:F28], [H2:M28])) Is Nothing Then
    If Target.Count = 1 And Target.Value <> "" Then
        Unprotect "123"
        Target.Locked = True
        If Target.Column = 2 Then
            Target.Offset(, -1) = Target.Offset(, -1) + 1
            Target.Offset(, 5) = Now
        End If
        Protect "123"
    End If
End If
End Sub
Lưu ý: G2:G28 cần Locked (Thao tác: chọn G2:G28 > Format Cells > Protection > chọn Locked > OK.
Cảm ơn Anh rất nhiều ạ.
 
Web KT

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

Back
Top Bottom