Excel VBA: блокировка / повторная блокировка ячейки с отметкой имени пользователя, только когда в соседнюю ячейку введены данные - PullRequest
0 голосов
/ 16 октября 2018

Итак, я использовал следующий код:

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

Однако я не могу найти решение для разблокировки / разблокировки.

Это выполнимо?

Если кто-нибудь мог бы предложить решение, которое было бы весьма признательно, я пытался придумать что-то безрезультатно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...