#vba #ms-access #outlook
#vba #ms-access #outlook
Вопрос:
В MS Outlook у меня есть кнопка, которая вызывает макрос в MS Access. Этот макрос открывает форму и задает текст. Каждый раз, когда я нажимаю эту кнопку, открывается новый экземпляр Access. Как мне предотвратить открытие нескольких экземпляров Access?
Код Outlook:
'general declarations:
Public appAccess As Object
Sub OpenRecord()
Dim Reference As String
Dim docAccess
Reference = 'teststring'
Set appAccess = CreateObject("Access.Application")
docAccess = appAccess.opencurrentdatabase("D:DatabaseMSA_db.accdb")
appAccess.Visible = True
appAccess.Run "OpenInternalReference", Reference
End Sub
Код доступа:
Public Sub OpenInternalReference(MailReference As String)
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "browse"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Forms("Browse").prefilter.SetFocus
Forms("Browse").prefilter.Text = MailReference
End Sub
Ответ №1:
Ваша проблема не в .Run
методе, а в вашем Set appAccess = CreateObject("Access.Application")
, поскольку он всегда создает новый экземпляр access.
Этот код пытается получить приложение Access, которое уже открыто, и создает новое, если оно не найдено:
Dim appAccess As Object
On Error Resume Next
Set appAccess = GetObject(Class:="Access.Application")
On Error GoTo 0
If appAccess Is Nothing Then
Set appAccess = CreateObject("Access.Application")
End If
Комментарии:
1. Единственное, что мне нужно было добавить
On Error Resume Next
opencurrentdatabase
, это команда выше.2. @Jellema Если вы добавили при возобновлении работы с ошибкой, вам также пришлось добавить ошибку Goto 0. В противном случае нам придется списать ошибку на рецензирование.
3. @niton: хорошо, я буду использовать это