Страницы: 1
RSS
Проверка на наличие пароля на листе с помощью VBA
 
Добрый день.

Уперся под конец дня в проблему, и нигде найти решения не могу.

1) Необходимо проверить есть ли на листе пароль, если есть, то снять, если нет, то GoTo. Как снять пароль знаю. Но если пароля на листе нет, то макрос почему то дальше не выполняется. Пароль находится в ячейке А5

Снимаю пароль так:
Код
Workbooks(StartKA).Sheets(1).Unprotect Range("A5").Value

2) Поправьте если не прав, я правильно на постановку защиты листа указываю откуда пароль брать?
Код
Workbooks(StartKA).Sheets(1).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True _        
    , AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, _
    llowDeletingRows:=True
Range("A5").Value

3) И как прописать что бы пароль брался из переменной а не обращался к ячейке каждый раз?  
 
Указать лист в Range("A5").Value было бы не лишним. Может и вопрос решился бы?
 
Цитата
GertiyMV написал:
то макрос почему то дальше не выполняется.
странно, должен
Цитата
GertiyMV написал:
И как прописать что бы пароль брался из переменной
так и прописать, заменив Range("A5") на переменную.
По вопросам из тем форума, личку не читаю.
 
Апострофф, спасибо!

Кошки-макарошки, видать домой пора уже) Все верно, забыл указать откуда брать информацию.

Указал после .Unprotect  пароль из переменной Password:=Pass и все заработало. Еще пять минут потерял пока искал пропущенную запятую после Pass и аргументами при постановке пароля))

Переменную записал как
Код
    Dim Pass$
    Pass = Range("A5").Value

Сам код на снятие
Код
    Workbooks(StartKA).Sheets(1).Unprotect Password:=Pass

И на постановку
Код
    Workbooks(StartKA).Sheets(1).Protect Password:=Pass, DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, _
        AllowDeletingRows:=True

Это я написал если вдруг кому в будущем поможет)
 
наличие пароля на листе с помощью VBA можно проверить такой функцией:
Код
Function HasPassword(ws As Worksheet) As Boolean
  If Not ws.ProtectScenarios Then Exit Function
  On Error Resume Next
  ws.Unprotect ""
  If Err Then HasPassword = True Else ws.Protect
End Function
если результат функции True - лист защищен с паролем, иначе не защищен вообще или защищен без пароля
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, нашел еще такое решение:
Код
Sub Макрос1()   
   If ActiveSheet.ProtectContents = False Then   
       MsgBox "Лист не защищён!", vbInformation, ""   
   Else   
       MsgBox "Лист защищён паролем!", vbExclamation, ""   
   End If   
End Sub
 
вариант отличный, только он не отвечает на поставленный вами вопрос:
Цитата
GertiyMV написал:
Проверка на наличие пароля на листе с помощью VBA
а отвечает на вопрос "наличия защиты на листе", собственно, не отвечая на вопрос, заданный в теме
согласитесь, это два разные вопроса и ответы на них разные и проверки ответов на них то же разные
Изменено: Ігор Гончаренко - 14.01.2020 19:00:58
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Страницы: 1
Наверх