VBA код для использования пароля из другого суб в Excel
У меня есть два кода, один, который защищает все листы, которые используют пароль от окна ввода, и второй, который удаляет ошибки #REF!
. На втором коде мне нужно сначала снять защиту листа, чтобы удалить строку. Теперь я пытаюсь понять, как я могу использовать пароль из первого кода, чтобы снять защиту листа, чтобы второй код мог удалить строки #REF!
ошибок?
Не уверен, что это вообще возможно, но, возможно, у кого-то была такая же проблема раньше.
Любая помощь-это оцененный.
Sub ProtectAllSheets()
Dim pwd1 As String, pwd2 As String
pwd1 = InputBox("Enter your password", "")
If pwd1 = "" Then Exit Sub
pwd2 = InputBox("Enter the password again", "")
If pwd2 = "" Then Exit Sub
'Checks if both the passwords are identical
If InStr(1, pwd2, pwd1, 0) = 0 Or _
InStr(1, pwd1, pwd2, 0) = 0 Then
MsgBox "Please type the same password. ", vbInformation, ""
Exit Sub
End If
For Each ws In ActiveWorkbook.Sheets
If ws.ProtectContents = False = True Then
ws.Protect Contents:=True, Scenarios:= _
True, AllowFormattingCells:=True, AllowDeletingRows:=True, Password:=pwd1
End If
Next ws
MsgBox "Sheets are protected."
End Sub
Sub DeleteRows() ' Cells which contain an Error Formula
ActiveSheet.Unprotect pwd1
Dim c As Long
For c = 400 To 2 Step -1
If IsError(Cells(c, 3)) Then
Rows(c).EntireRow.Delete
End If
Next c
ws.Protect Contents:=True, Scenarios:= _
True, AllowFormattingCells:=True, AllowDeletingRows:=True, Password:=pwd1
End Sub
1 ответ:
Вам нужно будет объявить переменную как
Public
.Таким образом, он доступен во всех ваших процедурах и функциях.Public pwd1 As String Sub ProtectAllSheets() 'NO dim for pwd1 here pwd1 = InputBox("Enter your password", "") 'your code here End Sub
Но я рекомендую использовать
.Protect UserInterFaceOnly:=True
который защищает лист от редактирования пользователем, но позволяет VBA редактировать его без ограничений.Поэтому вам просто нужно защитить ваши листы в событии
Workbook_Open()
, как это:Private Sub Workbook_Open() Sheets("Sheet1").Protect Password:="Secret", UserInterFaceOnly:=True Sheets("Sheet2").Protect Password:="Secret", UserInterFaceOnly:=True 'Repeat with the name and password of additional sheets to be manipulated by VBA. End Sub
Таким образом, вам не нужно защищать/снимать защиту для каждого действия VBA.
Для полного руководства и более информацию смотрите: ускорение Excel VBA макросы с Protect UserInterFaceOnly .