Вообще защиту базы, а именно, объектов и таблиц стандартными методами желательно не производить. Используйте, например, метод RSA для защиты данных в таблицах.
Рассмотрим другой вариант защиты, а именно, объектов базы данных и программного кода. Например, необходимо создать файл mdb, который можно было изменять пользователю, а некоторые программы из формы изменить было бы нельзя. В данном примере создается внешний класс для формы и размещается в mde файле, который используется как библиотека.
Применение класса выгодно также за счет экономии времени на разработку событий для стандартных кнопок: ОК, Отмена, Добавить, Печать и т.п. Если у Вас будет 5-10 форм это уже оправдывает создание класса и описание событий объектов.
' Описание внутреннего класса для формы. Разместите его в вашей форме.
Private mFrm As clsProtForm
Private Sub Form_Open(Cancel As Integer)
Set mFrm = New clsProtForm ' Создаем класс
Set mFrm.Form = Me.Form ' Устанавливаем ссылку
End Sub
' Это внешний класс для формы. Сохраните его в текстовом файле, а потом импортируйте из VBA. Обратите внимание на использование объектов c событиями, и именно, формы, кнопок и группы. Все события класса будут срабатывать ПОСЛЕ работы с пользовательским классом формы.
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
END
Attribute VB_Name = "clsProtForm"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Compare Database
Option Explicit
' Объекты с событиями
Private WithEvents clsFrm As Form ' Форма класса
Attribute clsFrm.VB_VarHelpID = -1
Private WithEvents butCancel As CommandButton ' Кнопка класса
Attribute butCancel.VB_VarHelpID = -1
Private WithEvents GroupSelect As OptionGroup ' Группа
Attribute GroupSelect.VB_VarHelpID = -1
' Свойства форм
Public Property Set Form(Value As Form)
On Error GoTo 999
' События для формы
Set clsFrm = Value
clsFrm.OnLoad = "[Event Procedure]" ' Событие для загрузки
' События для клавиш
Set butCancel = clsFrm.Controls("butCancel") ' Ссылка на кнопку
butCancel.OnClick = "[Event Procedure]" ' Устанавливаем событие
' События для переключателя
Set GroupSelect = clsFrm.Controls("GroupSelect") ' Ссылка на группу
GroupSelect.AfterUpdate = "[Event Procedure]" ' Устанавливаем событие
Exit Property
999:
MsgBox Err.Description
Err.Clear
End Property
Public Property Get Form() As Form
Set Form = clsFrm
End Property
' События формы
Private Sub clsFrm_Load()
subProgress "clsFrm_Load" ' Загрузка
End Sub
' События кнопок
Private Sub butCancel_Click()
subProgress "butCancel_Click" ' Нажатие кнопки отмена
End Sub
' События группы
Private Sub GroupSelect_AfterUpdate()
subProgress "GroupSelect_AfterUpdate. Значение= " & clsFrm.Controls!GroupSelect
End Sub
' Сообщение. Вывод данных в форму
Public Sub subProgress(strMsg As String)
clsFrm.Controls("Progress") = _
clsFrm.Controls("Progress") & "clsProtForm: " & strMsg & vbNewLine
End Sub