Доступ к листу Excel с паролем - PullRequest
0 голосов
/ 03 июля 2019

Я создал файл Excel с 3 рабочими листами, например так:

enter image description here

Моя цель: сделать рабочие листы доступными только с паролем.Это означает, что вы можете просматривать содержимое листа только с паролем.Например: когда «Пользователь» нажимает «Администратор», содержимое рабочего листа отображается только после ввода правильного пароля.

Защита рабочего листа бесполезна.

Возможно ли это?

Ответы [ 3 ]

1 голос
/ 03 июля 2019

Нет возможности надежно защитить только один лист от просмотра. Вы можете защитить только просмотр всей книги (с паролем).

Любой обходной путь, который вы пытаетесь надежно скрыть / защитить лист с паролем, может быть легко обманут любым пользователем.

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

0 голосов
/ 04 июля 2019

Как насчет этого решения ADO?!

Добавить ссылку: Объекты данных Microsoft ActiveX 2.8 Библиотека

Sub test()

    Dim Conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim dbPath As String
    Dim aQuery As String
    Dim pword As String
    Dim strcon As String


    dbPath = ThisWorkbook.Path & "\Database.mdb"
    pword = "abcd"
    aQuery = "SELECT * FROM myTable"

    strcon = "Provider=Microsoft.Jet.OLEDB.4.0;" _
            & "Data Source=" & dbPath & ";" _
            & "Jet OLEDB:Database Password=" & pword & ";"

    Conn.Open strcon
    rs.Open aQuery, Conn

    If Not (rs.EOF And rs.BOF) Then
        MsgBox rs.Fields(0)
    End If

    rs.Close
    Set rs = Nothing
    Set Conn = Nothing

End Sub

Или использовать решение DAO.

Добавить ссылку:Библиотека объектов Microsoft DAO 3.6

Sub test()

    Dim Conn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim dbPath As String
    Dim aQuery As String
    Dim pword As String
    Dim strcon As String


    dbPath = ThisWorkbook.Path & "\Database.mdb"
    pword = "abcd"
    aQuery = "SELECT * FROM myTable"

    strcon = "Provider=Microsoft.Jet.OLEDB.4.0;" _
            & "Data Source=" & dbPath & ";" _
            & "Jet OLEDB:Database Password=" & pword & ";"

    Conn.Open strcon
    rs.Open aQuery, Conn

    If Not (rs.EOF And rs.BOF) Then
        MsgBox rs.Fields(0)
    End If

    rs.Close
    Set rs = Nothing
    Set Conn = Nothing

End Sub
0 голосов
/ 03 июля 2019

Попробуйте следующие коды.

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim MySheetName As String
MySheetName = "Admin1" 'The sheed name which you want to hide.
    If Application.ActiveSheet.Name = MySheetName Then
    Application.EnableEvents = False
    Application.ActiveSheet.Visible = False
    response = Application.InputBox("Password", "Enter Password", , Type:=2)
        If response = "rainy2019" Then 'Unhide Password.
            Application.Sheets(MySheetName).Visible = True
            Application.Sheets(MySheetName).Select
        End If
    End If
Application.Sheets(MySheetName).Visible = True
Application.EnableEvents = True
End Sub

Окно VBA:

enter image description here

...