Лучшее решение - ограничить ссылки в вашей Access MDB внутренними компонентами Access. Это будет ссылка Access, ссылка VBA и ссылка DAO. Все остальные внешние библиотеки должны использоваться с поздним связыванием. Например, если вы используете объект файловой системы вместо этого (со ссылкой на объектную модель хоста сценариев Windows):
Dim objFSO As New FileSystemObject
If objFSO.FolderExists("\\d9m09521\WB\") Then
...
End If
Вы удалили бы ссылку и преобразовали бы ее в это:
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists("\\d9m09521\WB\") Then
...
End If
Если вас беспокоит снижение производительности инициализации FSO при каждом его использовании, вы можете кешировать ссылку на него. Я обычно использую статическую переменную внутри функции, чтобы вернуть объект, подобный этому:
Public Function FSO() As Object
Static objFSO As Object
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
FSO = objFSO
End Function
Теперь вы можете захотеть получить фантазию, а также иметь возможность снести созданный объект, и в этом случае вы сделаете что-то вроде этого:
Public Function FSO(Optional bolCloseObject As Boolean = False) As Object
Static objFSO As Object
If bolCloseObject Then
Set objFSO = Nothing
Exit Function
End If
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
FSO = objFSO
End Function
В любом случае, весь смысл в том, что позднее связывание разрешает расположение внешних библиотек во время выполнения и, таким образом, не прерывается, за исключением случаев, когда внешняя библиотека не установлена или не зарегистрирована должным образом. При поздней привязке вы можете перехватить оба этих условия, но при ранней привязке все ваше приложение Access просто ломается.