MS Access VBA / SQL Email Функция - PullRequest
       7

MS Access VBA / SQL Email Функция

0 голосов
/ 09 октября 2018

Я создаю базу данных в MS Access, которая используется сотрудниками для записи ежедневных записей, доступа к информации о клиентах и ​​т. Д. 2 основных функции базы данных - это Distro (заменяющий старую матрицу Excel Distro Matrix) и настраиваемый адрес электронной почты.Функция отчета.

Функция отчета по электронной почте предназначена для открытия нового сообщения в Outlook и автоматической генерации таких полей, как «Кому», «CC», «Тема» и «Тело сообщения».Сама кнопка находится в форме, где сотрудники сами не взаимодействуют с таблицами базы данных и могут просто выбрать из списка отчетов в поле со списком и нажать «Отчет по электронной почте».

Мой вопрос сложен из-за структуры моей базы данных.Поле со списком представляет собой список отчетов, которые отправляются ежедневно и не могут быть отредактированы пользователем.Distro - это таблица, которая структурирована следующим образом: Person / Entity (Имя), Контактная информация (Адрес электронной почты), а остальные столбцы - это Типы отчетов, в которых установлен флажок True / False.В конечном счете, каждый принимающий человек перечисляется по имени, контактному адресу электронной почты и в зависимости от того, какие отчеты они получают, они отметили флажок под каждым столбцом отчета.

Мне нужно разработать функцию, которая выполняет следующее: Проверяет, что представляет собой отчет.выберите из поля со списком в форме, откройте новое электронное письмо в Outlook, запросите таблицу дистрибутивов, для которой проверено получение выбранного отчета, и, наконец, соберите эти конкретные адреса электронной почты и вставьте их в сообщение в правильном месте (для, CC) при создании строки темы сообщения и тела сообщения в соответствии с тем, какой отчет был выбран из исходного поля со списком.

1 Ответ

0 голосов
/ 28 октября 2018

Если вы хотите, чтобы ваша база данных была более рациональной и простой в использовании, я предлагаю, чтобы в таблице Distro были только Имя, адрес электронной почты и идентификатор.

Для этого создайте еще одну таблицу [Отчеты Distro] с 2 полями: [Персона ID], которая является числом, присоединенным к Distro.ID, и [Имя отчета], которое содержит имя отчета.

Для вашей комбинацииполе строки исходного кода, используйте ниже:

SELECT [Name] 
FROM MsysObjects
WHERE [Type] = -32764

Чтобы извлечь список адресов электронной почты для отчета используйте ниже:

Private Sub Command13_Click()
Dim Selected_Report As String
Dim SqlStr As String
Dim EmailList As ADODB.Recordset

Dim olApp As Object
Dim olMailItm As Object

Selected_Report = Form_MainForm.ReportListCombo.ItemData(0)
'....... Export report as PDF ......
SqlStr = "SELECT Distro.[Contact Info] " & _
    " FROM Distro INNER JOIN [Distro Reports] ON " & _
    "   [Distro Reports].[Person ID] = Distro.ID " & _
    " WHERE [Distro Reports].[Report Name] = [" & Selected_Report & "];"
CurrentDb.QueryDefs("EmailList").SQL = SqlStr
Set EmailList = CurrentDb.OpenRecordset("EmailList")
Set olApp = CreateObject("Outlook.Application")
Set olMailItm = olApp.CreateItem(0)
With olMailItm
    .cc = ""
    While Not EOF(EmailList)
        .cc = .cc & ";" & EmailList(0)
        ٍEmailList.MoveNext
    Wend
    EmailList.Close
    .subject = "Your subject"
    .Attachments.Add Path2Report, olByValue, 0
    ' for simple text:
    .body = ""
    ' for reached text style:
    .htmlbody = ""
    .display
End With
End Sub

Для экспорта отчета в PDF см. ссылку ниже: ПростойКод VBA для экспорта отчета о доступе в сохраненный файл PDF при выполнении кода

...