Запрет доступа к листу Excel с помощью пароля

В Microsoft Excel 2003 есть возможность запрета доступа ко всему файлу с помощью пароля, но иногда требуется запретить доступ к определенному листу в Excel. В этой статье я опишу свой способ, как можно поставить пароль на определенный лист.

Для начала расскажу, что я хочу реализовать. Вы открываете файл Excel и попадаете на определенный лист, доступ к которому Вы имеете, и при переходе на другой лист, на котором стоит пароль, будет выскакивать формочка для ввода пароля, при этом содержимое листа будет скрыто. Другими словами пользователь, который не должен, иметь доступ к этому листу не будет видеть, что там есть, но если пользователь просто случайно нажал на этот лист, у нас будет кнопочка возврата на исходный лист.  Все это будет реализовано на VBA (Visual Basic for Applications).

Ставим пароль на доступ к листу Excel

Ну, давайте начнем, откройте Excel и сохраните его, допустим под названием «Пароль на лист». Затем на первом листе, в центре напишите «Секретные данные», а на Листе2 напишите «Общедоступный лист».

После этого нажимайте ALT+F11 для перехода в редактор Visual Basic. Затем нажмите Insert->UserForm (для добавления в проект формы). Добавьте на форму две кнопки и одно текстовой поле.

Измените свойство Caption кнопки CommandButton1 на «Ввод», а кнопки CommandButton2 на «Вернуться назад». Также измените значение Caption нашей формы (UserForm1), скажем на «Для продолжения введите пароль». Измените свойство TextAlign, нашего текстового поля TextBox1, на 2, т.е. выравнивание текста по центру. Также можете изменить шрифт и размер текста в свойстве Font. А еще в свойстве Text (объекта TextBox1) впишите «Введите пароль», чтобы по умолчанию загружался этот текст.

Если Вы все сделали правильно, то у Вас внешний вид должен получиться примерно вот таким (за исключением размера объектов):

Скриншот 1

Код VBA для запрета доступа к листу Excel

Затем впишите вот такой код в окно кода формы:

   
        Private Sub CommandButton1_Click()
        If TextBox1.Text = "Мой пароль" Then
                Windows("Пароль на лист.xls").Visible = True
                End
        Else
                MsgBox "Вы ввели неправильный пароль", vbInformation, "Неправильный пароль"
        End If
        End Sub

        Private Sub CommandButton2_Click()
                Windows("Пароль на лист.xls").Visible = True
                Worksheets("Лист2").Activate
                End
        End Sub

        Private Sub UserForm_Activate()
                ActiveWindow.Visible = False
        End Sub

        Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
                Cancel = True
        End Sub

Теперь осталось вызывать эту форму при активации листа, для этого в редакторе VB выберите лист, на который Вы хотите поставить пароль, щелкните два раза по нему, у Вас откроется окно кода, Вы вставляете туда вот это:

   
        Private Sub Worksheet_Activate()
                UserForm1.Show
        End Sub

Еще, для того чтобы по умолчанию всегда открывался общедоступный лист, также в редакторе выберите «Эта книга» откройте редактор кода (двойным щелчком) и вставьте вот это:

   
        Private Sub Workbook_Open()
                Worksheets("Лист2").Activate
        End Sub

Можно еще запретить изменять пароль пользователем, т.е. допустим, с этим файлом работает человек, который немного разбирается в Excel, и он легко может зайти в редактор Visual Basic и изменить пароль. Для того чтобы этого избежать поставим пароль на редактирования VBA проекта. В редакторе Visual Basic нажмите правой кнопкой на VBAProject, откроется меню, в нем выберите Properties. Далее в следующем окне перейдите на вкладку Protection, поставьте галочку как на картинке и введите пароль.

Скриншот 2

После этого редактировать код всех макросов, т.е. код Visual Basic сможете только Вы, или тот человек, который знает пароль на проект VBA.

Если Вы все сделали правильно, то у Вас при открытие файла будет открываться «Лист2», а при попытке перейти на «Лист1» будет запускаться форма для ввода пароля, а при нажатие кнопки «Вернуться назад», Вы будете возвращаться на «Лист2».

Программка достаточно примитивная, но начинающим программистам VBA она может помочь в развитие своих более сложных и более нужных программ. Так как Вы ее легко можете изменить, дополнить или использовать совершенно в других целях. Надеюсь, она Вам хоть немного помогла!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 19
  1. Аватар
    Лекс

    Спасибо. Все очень понятно и доступно.

  2. Аватар
    Alex

    Спасибо мужик) Очень помог!! Давно искал как сделать форму авторизации для документов эксель)) Респект тебе!!!

  3. Аватар
    art

    макрос хорош, но один минус
    файл например переименовали и макрос уже не работает.

  4. Аватар
    Андрей

    Пытаюсь проделать то же самое в Office 2010, но не получается. Скачивать пиратский 2003 или под 2010 кто-то может помочь?

  5. Аватар
    Veronika

    Сделала тоже самое в 10-ом оффисе — получилось, работает.
    Штука в том, что изначально книгу надо сохранять в формате «Книга Exel с поддержкой макросов», соответственно вводить в команды надо «Пароль на лист.xlsm».
    Но если автоматический запуск макросов отключен, то все это не работает (это помимо случая смены названия файла).
    Большое спасибо за мануал, первая попытка работать в VBA, и у меня получилось!!! (с 4 попытки, не буду скрывать)

  6. Аватар
    Сергей

    Как сделать разный пароль для разных листов?
    Дописал такой код
    «If TextBox1.Text = «12345» And Sheet = «Алена» Then
    Windows(«менеджеры нов ОТЧЕТ.xlsm»).Visible = True
    End
    ElseIf TextBox1.Text = «54321» Then
    Windows(«менеджеры нов ОТЧЕТ.xlsm»).Visible = True
    End»
    Переменная Sheet — имя активного листа, но не знаю как его правильно получить в коде для формы.

    1. Админ
      Админ (автор)

      Попробуй вот так:

      Sheet = ActiveSheet.Name

      1. Аватар
        Сергей

        Sheet = ActiveSheet.Name пробовал. Я это писал в коде для формы, но нормального результата не получил. Я vba особо не знаю, просто нужно знакомым помочь с документом. Может Sheet нужно получать в коде листа или документа и потом передавать в форму? Но я не знаю как. Спасибо за совет.

        1. Админ
          Админ (автор)

          Как вариант добавляешь модуль примерно со следующим содержимым:

          Public sheet As String
          Public Sub Startform(sheet name As String)
          sheet = sheetname
          UserForm1.Show
          End Sub

          Затем вместо
          Private Sub Worksheet_Activ ate()
          UserForm1.Show
          End Sub

          Пишите
          Private Sub Worksheet_Activ ate()
          Call Startform(«Лист1»)
          End Sub

          Итак для каждого нужного листа, где «Лист1» это соответственно название листа. В коде формы уже обрабатываете переменную Sheet.

  7. Аватар
    Сергей

    В начале всё было хорошо до момента
    «»Затем нажмите insert->UserForm (Для добавления в проект формы). Добавьте на форму две кнопки и одно текстовой поле.»»
    Всё при нажатие insert — ни чего не происходит.
    Куда и что дальше вводить не знаю…..

  8. Аватар
    Сергей Тычёблин

    А всё-таки как нужно изменить код, чтобы можно было безболезненно переименовывать и файл и листы?

  9. Аватар
    Денис

    Есть обход данной защиты!
    Если просто нажать и задержать клик по защищенному листу не отпуская палец, то будет видно содержимое листа до выпадения формы с вводом пароля.
    Как исправить? есть у кого-нибудь решение?
    Можно конечно в самом защищенном листе ставить активную клетку где-нибудь на пустом пространстве внизу и сохранять, но это крайне неудобно и можно забыть сделать

    1. Аватар
      Darya

      Я просто все листы, которые с паролем, скрыла. И когда нажимаешь показать выбранный лист, нечего зажимать)

  10. Аватар
    Мария

    Измените свойство Caption кнопки CommandButton1 на «Ввод», а кнопки CommandButton2 на «Вернуться назад» — как изменить свойства кнопок?

    1. Админ
      Админ (автор)

      Для этого нужно, выделить необходимый объект, т.е. кнопку, затем в окне свойств (Propertis) найти свойство «Caption», т.е. заголовок, и ввести свой текст. По умолчанию там заполнено CommandButton1. Для быстрого выбора объекта (или просто навигации по объектам) можно также использовать выпадающее меню в окне свойств.

  11. Аватар
    Ахмад

    Добрый день! Скажите пожалуйста у Вас получилась поставить разные пароли на разные листы? Спасибо!

  12. Аватар
    Darya

    Привет! А как сделать так, что бы каждый раз пароль не вводить. Файл в общем доступе. Человек скачал один раз ввел пароль и все для него этот лист остается открытым. Можно так сделать?

    1. Аватар
      Валерий

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

  13. Аватар
    Людмила

    Спасибо ОГРОМНОЕ за эту информацию!.
    Действительно на офисе 2019 нужно ставить .xlsm.
    Может кому пригодиться… сам файл в котором вы скрываете листы не должен содержать нижнее подчеркивание, иначе выдает ошибку. Намучилась, пока не перепробовала все варианты.

Добавить комментарий для Людмила Отменить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.