Меня попросили устранить неполадки сценария VBA, который отправляет электронное письмо из базы данных Access. БД и VBA были разработаны в Access 2010 (данные хранятся в базе данных SQL) и, вероятно, предназначены для Outlook 2010.
В настоящее время мы используем Outlook 2013 и 2016.
Когда мой скрипт (отмеченный ниже) запускается, в объявлении Outlook.Application генерируется ошибка: Определяемый пользователем тип данных не определен .
Здесь начинается сценарий, где мы определяем типы данных.
Option Compare Database
Option Explicit
' InitOutlook sets up outlookApp and outlookNamespace.
Private outlookApp As Outlook.Application
Private outlookNamespace As Outlook.NameSpace
Остальная часть сценария приведена ниже. Он вызывается кнопкой формы, напрямую вызывающей SendEmail () и передающей адрес электронной почты в виде переменной.
Private Sub InitOutlook()
' Initialize a session in Outlook
Set outlookApp = New Outlook.Application
'Return a reference to the MAPI layer
Set outlookNamespace = outlookApp.GetNamespace("MAPI")
'Let the user logon to Outlook with the
'Outlook Profile dialog box
'and then create a new session
outlookNamespace.Logon , , True, False
End Sub
Public Sub SendEmail(varTo As Variant)
Dim mailItem As Outlook.mailItem
InitOutlook
Set mailItem = outlookApp.CreateItem(olMailItem)
mailItem.To = varTo & ""
mailItem.Subject = "subject text"
mailItem.Body = "Body text"
mailItem.Display
Set mailItem = Nothing
CleanUp
End Sub
Я не очень знаком с VBA / Access, но я работал с VB.NET, и с самого начала я был уверен, что это был простой вопрос: «в нем отсутствует оператор импорта или ссылка. «
Немного покопавшись, я обнаружил здесь , что для использования этой функции необходимо добавить ссылку в библиотеку объектов Microsoft Outlook XX.X ,
Я еще не видел ссылок, которые есть в этой базе данных (работает над тем, чтобы добраться туда сейчас), так как у меня ограниченный доступ к этой базе данных доступа, поскольку она содержит много конфиденциальной информации, и я должен находиться под наблюдением при просмотре Это.
Однако, учитывая, что мы использовали Outlook 2010, когда мы писали этот сценарий, и теперь разделены между Outlook 2013 и 2016, я считаю, что нам нужно обновить эту ссылку до более новой.
Я обсуждал это с коллегой здесь, и он задал мне важный вопрос:
Можем ли мы сослаться на несколько версий библиотеки объектов Microsoft Outlook?
Если мы нацеливаемся на самую последнюю версию библиотеки, например, на Outlook 2016, сценарий не будет работать для пользователей Outlook 2013?
Обновление: В ходе тестирования я обнаружил, что если бы мы использовали библиотеку объектов MS Outlook 16.0, Outlook 2013 не распознал бы ссылку и выдавал бы ошибки, если эта ссылка отсутствовала.
Если мы использовали библиотеку MS Outlook 15.0, скрипт работал на машинах с любой из версий outlook.