Я совершенно новичок в VBA в Excel и хочу просто защитить с его помощью ячейку.
Код может быть настолько простым, насколько это возможно.
Единственное, что я хочу, это:
Пароль может быть «123», а желаемая ячейка — G6.
Я пробовал несколько методов, но всегда застревал в циклах, где можно было просто закрыть диалоговое окно, и новое значение обновлялось без правильного пароля.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G6")) Is Nothing Then
Dim enteredValue As Variant
enteredValue = Target.Value ' Store the entered value
Dim passwordInput As String
Dim correctPassword As String
correctPassword = "123" ' Set password
Do
passwordInput = InputBox("Enter Password to confirm change (or Cancel to revert):", "Password Required")
If passwordInput = correctPassword Then ' Correct password, allow the change
Exit Do
ElseIf passwordInput = "" Then ' User cancelled
Application.Undo ' Undo the change immediately
Exit Do
End If
Loop ' Continue if password was wrong
End If
Конец субтитра
@BrendonMedeiros Проверьте этот пост stackoverflow.com/a/69325825/5514747
@BrendonMedeiros spreadsheetweb.com/how-to-lock-formula-cells-with-vba
Хорошо, я заставил его работать так, как задумано.
Private Sub Worksheet_Change(ByVal Target As Range)
' Define password
Const Password As String = "123"
' Check if cell is A1
If Target.Address = "$A$1" Then
Dim Answer As String
Answer = InputBox("Input password:", "Password Chack")
' Check if answer is ccorrect
If Amswer = Password Then
' allow update
Exit Sub
Else
' undo update and error message
Application.EnableEvents = False ' avoid ad infinitum loop
Application.Undo
Application.EnableEvents = True
MsgBox "Inccorect password. Undone", vbCritical, "Error"
End If
End If
Конец субтитра
Чтобы защитить ячейку паролем в Excel с помощью VBA, вы можете использовать следующий подход. Этот код предложит пользователю ввести пароль, когда он попытается изменить значение ячейки G6. Если введен правильный пароль, значение обновляется. Если введен неправильный пароль или пользователь закрывает диалог, значение возвращается к предыдущему.
Private Sub Worksheet_Change(ByVal Target As Range)
'If Changed Cell is G6
If Not Intersect(Target, Range("G6")) Is Nothing Then
Application.EnableEvents = False ' Disable events to prevent infinite loop
Dim enteredValue As Variant
Dim oldValue As Variant
Dim passwordInput As String
Dim correctPassword As String
'Keeping old value in memory before change
oldValue = Target.Value
'Ask for the password
correctPassword = "123"
passwordInput = InputBox("Enter Password to confirm change (or Cancel to revert):", "Password Required")
'Validate Password
If passwordInput <> correctPassword Then
'Password not correct or cancel operation values reverted
Application.Undo
If passwordInput <> "" Then
MsgBox "Incorrect password. Change reverted."
End If
End If
Application.EnableEvents = True ' Re-enable events
End If
End Sub
Спасибо за помощь. Я получил рабочий код очень похожим способом.
Начните запись макроса и защитите ячейку паролем. Затем вы можете увидеть коды из окна VBA.