Как определить, защищен ли Access VBA паролем - PullRequest
0 голосов
/ 17 июня 2019

Я создаю надстройку Access, которая может импортировать / экспортировать объекты Access из открытого приложения базы данных. Я использую недокументированные команды SaveAsText и LoadFromText для работы с объектами. Если на VBA приложения Access указан пароль, команды не будут выполнены. Я ищу способ программно определить, защищен ли VBA паролем, до того, как начнется моя процедура.

Обратите внимание, этот вопрос не касается пароля в самой базе данных Access . Я имею в виду защиту, установленную в диалоговом окне свойств проекта VBA, как показано на рисунке ниже.

enter image description here

Проверьте эту ссылку, если вам нужно Определите, защищена ли база данных MS Access паролем

1 Ответ

2 голосов
/ 17 июня 2019

Вот функция, которая возвращает TRUE, если активный проект VBA защищен паролем.

Function ProtectedVBProject() As Boolean
' Returns TRUE if the VBA of the project is password protected.

    Dim VBC As Integer
    VBC = -1
    On Error Resume Next
    VBC = Application.VBE.VBProjects(1).VBComponents.Count ' Project count may be Base 1

    On Error GoTo 0
    If VBC = -1 Then
        ProtectedVBProject = True
    Else
        ProtectedVBProject = False
    End If
End Function

Вот пример того, как вызывать эту функцию:

' Stop if the VBA is protected with a password.
If ProtectedVBProject Then
    MsgBox "It appears that the source code is password protected.  Please open" _
        & " the Visual Basic editor and enter the VBA password for the active database." _
        , vbExclamation, "Object Locked!"
    Exit Sub
End If

Еслинадстройка будет использоваться только мной или другими разработчиками, и код не скомпилирован в .mde или .accde, этот следующий пример дает пользователю возможность ввести пароль на месте, а затем продолжить.Мне, вероятно, не нужно говорить вам, что использование STOP в опубликованном коде, как правило, является плохой практикой.

' Stop if the VBA is protected with a password and ask if the user wants to unlock it.
If ProtectedVBProject Then
    Dim strMsg as String
    strMsg = "It appears that the source code is password protected." _
        & vbCrLf & vbCrLf & "Do you want to enter the VBA password now?"

    Select Case MsgBox(strMsg, vbYesNo Or vbExclamation Or vbDefaultButton1, "Object Locked")

        Case vbYes
            '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
            '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
            '=-=-=
            '=-=-=    ENTER THE VBA PASSWORD FOR THE ACTIVE DATABASE
            '=-=-=    THEN PRESS F5 TO RESUME THE CODE EXECUTION
            '=-=-=
            '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
            '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
            Stop        ' Press F5 to continue.  Do not remove this line.

        Case vbNo
            Exit Sub            
    End Select
End If
...