Макрос не работает, когда лист переименован

Я использую макрос на листе, который необходимо защитить. Это макрос:

wksPartsDataEntry.Unprotect Sheet11.Unprotect Application.ScreenUpdating = False Dim historyWks As Worksheet Dim inputWks As Worksheet Dim nextRow As Long Dim oCol As Long Dim myCopy As Range Dim myTest As Range Dim lRsp As Long Set inputWks = wksPartsDataEntry Set historyWks = Sheet11 'check for duplicate order ID in database If inputWks.Range("CheckID2") = True Then lRsp = MsgBox("Clinic ID already in database. Update record?", vbQuestion + vbYesNo, "Duplicate ID") If lRsp = vbYes Then UpdateLogRecord Else MsgBox "Please change Clinic ID to a unique number." End If Else 'cells to copy from Input sheet - some contain formulas Set myCopy = inputWks.Range("OrderEntry2") With historyWks nextRow = .Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Row End With With inputWks Set myTest = myCopy.Offset(0, 2) If Application.Count(myTest) > 0 Then MsgBox "Please fill in all the cells!" Exit Sub End If End With With historyWks With .Cells(nextRow, "A") .Value = Now .NumberFormat = "mm/dd/yyyy hh:mm:ss" End With .Cells(nextRow, "B").Value = Application.UserName oCol = 3 myCopy.Copy .Cells(nextRow, 3).PasteSpecial Paste:=xlPasteValues, Transpose:=True Application.CutCopyMode = False End With 'clear input cells that contain constants With inputWks On Error Resume Next With myCopy.Cells.SpecialCells(xlCellTypeConstants) .ClearContents Application.GoTo .Cells(1) ', Scroll:=True End With On Error GoTo 0 End With End If Application.ScreenUpdating = True wksPartsDataEntry.Protect Sheet11.Protect End Sub 

Макрос работает отлично. Однако я буду распространять файл другим пользователям, которые захотят использовать пароли для защиты своих листов. Каждый пользователь захочет использовать другой пароль. Добавление пароля в код не является вариантом, так как этот пароль будет уникальным, и я хочу, чтобы другие пользователи могли добавлять свой собственный пароль при защите. Существует ли код, который мог бы сделать что-то вроде:

 Sub Macro1() wksPartsDataEntry.Unprotect Password: (anything a user might choose as a password) Sheet11.Unprotect: (anything a user might choose as a password) 

Таким образом, в конце мой макрос будет защищать и воспроизводить на основе пароля, который пользователь выбирает сам, без необходимости изменять какой-либо код.

Надеюсь, я был достаточно ясен, спасибо за любой ответ!

Да, есть – вы должны просто искать защиту в excel-help:

wksPartsDataEntry.Unprotect(password) , в котором password является необязательным параметром, поэтому вы можете его оставить.

Чтобы сделать то, что вам нужно, попробуйте следующее:

 Public Sub MyUnprotect() wksPartsDataEntry.Unprotect InputBox( _ prompt:="Please type your password to unprotect:", _ Title:="Unprotect") End Sub 

Вы также можете расширить это для защиты , то есть, сохраняя данный пароль в качестве переменной.

Если вы хотите, чтобы звезды скрывали ввод пароля, вам нужно будет создать свой собственный UserForm, который вы бы вызывали вместо InputBox. Там вы можете настроить поле ввода со скрытым вводом.

Interesting Posts

excel – if и statement внутри iferror с индексом small row nest

Как добавить выбранное значение (по одному за раз) из списка в конкретный столбец Excel

Получение данных веб-сайта в Excel

Динамические связи между Excel и Access

Получите ценность ячейки из листа Excel с помощью Apache Poi

C # VS2005 Импорт файла .CSV в базу данных SQL

Как записывать данные на несколько листов одной книги на основе разных условий?

Перенос заметки в собственный столбец в Excel

Создать матрицу из таблицы?

Почему мой шрифт и фон (передний план) не работают здесь (Aspose Cells)?

Как остановить мой макрос от запуска еще одного -VBA

Заполнить Копировать ячейки для одной строки, Заполнить серии для разных строк

Зарегистрируйте UDF с описаниями аргументов, используя excel addin

Создать гиперссылку в файле Excel с помощью AppleScript

Как расширить вторичную метку строки только на одной первичной метке строки?

Давайте будем гением компьютера.