Итак, я использовал следующий код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rCell As Range
Dim rChange As Range
On Error GoTo ErrHandler
Set rChange = Intersect(Target, Range("p10:p5000")) 'sets range that is targetted. i.e. the range the receipt is added
If Not rChange Is Nothing Then
Application.EnableEvents = False
For Each rCell In rChange
If rCell > "" Then 'If statement - If cell in range is not blank, then..
With rCell.Offset(0, 1) 'Input username when adjacent P is formatted
.Value = UserName()
rCell.Offset(0, 2).Value = Date & " " & Time() 'Input date/time when adjacent P is formatted
End With
Else
'If deleting item in P column (receipt number) should result in removing the user stamp, remove first comma from the line below.
rCell.Offset(0, 1).Clear
'If deleting item in P column (receipt number) should result in removing the timestamp, remove first comma from the line below.
rCell.Offset(0, 2).Clear
End If
Next
End If
ExitHandler:
Set rCell = Nothing
Set rChange = Nothing
Application.EnableEvents = True
Exit Sub
ErrHandler
MsgBox Err.Description
Resume ExitHandler
End Sub
Public Function UserName() 'This function is required for the private sub worksheet change()
UserName = Environ$("UserName") 'i.e.Required for the username
End Function
Таким образом, приведенное выше предназначено для создания пользовательской отметки и отметки времени для двух ячеек насправа от P-ячейки после ввода данных в нее.
Например, , когда пользователь вводит данные в P19, в Q19 будет метка имени пользователя и метка времени в R19.
Я надеялся получить правило, которое будет блокировать соседние ячейки Q и R после ввода данных в P.
Проблема: достаточно легко найти правило для блокировки Q и R, если есть вход в P, однако я хотел бы пойти еще дальше и позволить разблокировать и повторно разблокировать Q и R каждыйвремя перезаписи в ячейке P только .
Например, Как только Q19 и R19 заблокированы после ввода данных в P19, единственный способ изменить Q19 и R19 - либо: 1- Снять защитувнесите изменения, а затем снова защитите 2 Введите данные в P19, который каким-то образом автоматически разблокирует Q19 и R19, чтобы разрешить новую печать, а затем автоматически заблокирует ее сразу же.
Самое близкое, что я могу придумать, это:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim xRg As Range
On Error Resume Next
Set xRg = Intersect(Range("Q1:R10000"), Target)
If xRg Is Nothing Then Exit Sub
Target.Worksheet.Unprotect Password:="Stuff"
xRg.Locked = True
Target.Worksheet.Protect Password:="Stuff"
End Sub
Однако я не могу найти решение для разблокировки / разблокировки.
Это выполнимо?
Если кто-нибудь мог бы предложить решение, которое было бы весьма признательно, я пытался придумать что-то безрезультатно.