Как сделать так, чтобы исходный рабочий лист был защищен паролем после того, как была сделана копия, нажав активную кнопку x?

Код ниже активируется активной кнопкой x. Код снимет защиту с активной рабочей книги и рабочего листа, сделает копию активного рабочего листа, поместит вкладку этого нового листа туда, где я хочу ее разместить, защитит новый рабочий лист и защитит рабочую книгу. Не удается защитить исходный рабочий лист, из которого была сделана копия. Мне нужен код для защиты паролем последнего активного листа (исходный лист, из которого была сделана копия). Любая помощь приветствуется.

Private Sub CommandButton13_Click()
ThisWorkbook.Unprotect Password: = "Password1"
ActiveSheet.Unprotect Password: = "Password2"
Dim i As Long, s As String, s2 As String
s = "NEW WONDERFUL WORKSHEET"
s2 = s
ActiveSheet.Copy After:=Sheets(2)
Do While WorksheetExists(s2)
    i = i + 1
    s2 = s & " " & i
Loop
ActiveSheet.Name = s2
ActiveSheet.Protect Password: = "Password2"
ThisWorkbook.Protect Password: = "Password1"
End Sub
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я бы немного реорганизовал код. Во-первых, давайте найдем доступное имя листа s2до, сняв защиту. Кроме того, я предполагаю, что код находится в объектном модуле рабочего листа, и в тот момент, когда мы нажимаем на кнопку, лист с этой самой кнопкой является фактически активным листом, поэтому мы можем называть его Me вместо ActiveSheet. Что касается паролей, давайте поместим их как константы в начале, чтобы их было легче изменить в случае необходимости.

Private Sub CommandButton13_Click()
 
Const BookPass = "Password1"
Const SheetPass = "Password2"
Dim i As Long, s As String, s2 As String
 
    s = "NEW WONDERFUL WORKSHEET"
    s2 = s
    Do While WorksheetExists(s2)
        i = i + 1
        s2 = s & " " & i
    Loop
   
    ThisWorkbook.Unprotect BookPass
    With Me
        .Unprotect SheetPass
        .Copy After:=Sheets(2)
        With ActiveSheet
            .Name = s2
            .Protect SheetPass
        End With
        .Protect SheetPass
    End With
    ThisWorkbook.Protect BookPass
End Sub

Другие вопросы по теме