Открытый пароль не распознается на защищенном листе - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть sub "ProtectAllSheets" в Module1 и еще один в объекте Sheet1, который предназначен для удаления целых строк, если есть #REF! Ошибка в столбце C Sheet1. Он отлично работает, когда лист защищен ... НО как-то, когда я закрываю книгу и открываю ее снова (которая все еще защищена), он не удаляет строки с ошибками, хотя это "UserInterface = True". Если я снимаю защиту листа, он работает нормально. Кажется, как только я закрываю книгу, некоторая информация теряется «как-то» ... Я просто не могу понять, что, черт возьми, может быть не так с кодом.

Option Explicit
Public pwd1 As String, pwd2 As String

Sub ProtectAllSheets()
Dim ws As Worksheet

  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 Password:=pwd1, UserInterFaceOnly:=True
    End If
        Next ws
MsgBox "Sheets are protected."
End Sub

Option Explicit

Sub Worksheet_Activate()
Dim sh As Worksheet
Dim c As Long
Set sh = ActiveSheet

    For c = 400 To 2 Step -1
        If IsError(Cells(c, 3)) Then
         Rows(c).EntireRow.Delete
        End If
    Next c

End Sub

1 Ответ

0 голосов
/ 14 сентября 2018

Ок, ребята, для тех из вас, у кого может быть подобная проблема. Я знаю, что это не лучшее решение, но оно работает. Похоже, что функция UserInterFaceOnly не сохраняется в файле, как только вы закроете и снова откроете книгу, она исчезнет. Итак, это то, что я сделал. Шаг 1. Удаленный Sub ProtectAllSheets () Шаг 2. Вставлена ​​процедура Workbook_Open.

Теперь ... кто-то все еще может увидеть слово 1214, если он нажмет Alt + F11. Я просто не могу ничего с этим поделать.

Sub Workbook_Open()

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Sheets
      If Not ws.ProtectContents Then
      ws.Protect Password:=1214, UserInterFaceOnly:=True
      End If
        Next ws
        
    MsgBox "Sheets are protected."

End Sub

Шаг 3. Сохраните ту же подпрограмму с помощью Worksheet_Activate ()

Sub Worksheet_Activate()

Dim sh As Worksheet
Dim c As Long
Set sh = ActiveSheet

    For c = 400 To 2 Step -1
        If IsError(Cells(c, 3)) Then
            Rows(c).EntireRow.Delete
        End If
            Next c
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...