MS Access VBA создает несколько отчетов электронной почты и параметры не сохраняют ссылку из формы - PullRequest
0 голосов
/ 28 января 2020

Я работаю над отчетом, чтобы вытащить сотрудников с датами окончания между двумя несвязанными текстовыми полями в форме. Отчет сгруппирован по супервизору. Моя цель - сохранить каждую группу отчетов в виде уникальных PDF-файлов с именем PDF под именем [Supervisor] - John Smith.PDF, Jill Smith.pdf et c. Этот отчет прилагается к электронному письму, которое открывается и ожидает корректировки перед отправкой.

В настоящее время это работает, за исключением пары проблем, которые я пытаюсь решить:

  1. Я получаю всплывающее окно параметров, запрашивающее StartDate и EndDate (мои параметры установлены в текстовые поля формы) перед каждым открытием отчета. Я должен вручную вводить эту дату для каждого параметра перед каждым отчетом, он не заполняется из формы.

  2. Я получаю несколько электронных писем, открытых для каждого руководителя. У некоторых есть пустые отчеты. Похоже, что я получаю по одному для каждой записи каждого отчета, с всплывающим параметром для каждого.

  3. После нажатия кнопки я ввожу даты во всплывающие окна параметров. Мои отчеты открываются, сохраняются, закрываются, и электронная почта генерируется правильно. Вместо того, чтобы автоматически переходить к следующему отчету / электронной почте, мне нужно снова вручную вводить дату во всплывающие окна параметров.

Моя форма имеет два поля Text0 и Text2 и кнопку, которая будет печатать отчет на основе запроса ниже с использованием VBA.

Запрос SQL:

SELECT DISTINCT [Active and Expired Badges].Supervisor_Clean, [Active and Expired Badges].FIRSTNAME, [Active and Expired Badges].LASTNAME, [Active and Expired Badges].[Premera ID], [Active and Expired Badges].Company, [Active and Expired Badges].Title, [Active and Expired Badges].[End Date], [FIRSTNAME] & " " & [LASTNAME] AS Name
FROM [Active and Expired Badges]
WHERE ((([Active and Expired Badges].Title) Like "*" & "outsource" & "*" Or ([Active and Expired Badges].Title) Like "*" & "Contingent" & "*") AND (([Active and Expired Badges].[End Date]) Between [StartDate:] And [StopDate:]));

Кнопка VBA:

Private Sub Command5_Click()

'split report into PDFs named after supervisor and open a separate email with each report attached

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim MyFileName As String
    Dim mypath As String
    Dim temp As String
    Dim qry As QueryDef
    Dim StartDate As DAO.Parameter
    Dim StopDate As DAO.Parameter

    Set db = CurrentDb()
    Set qry = db.QueryDefs("30-Day query")
    mypath = "C:\Users\cw52450\Desktop\Test Exports\"
    qry.Parameters("StartDate").Value = [Forms]![EndDate]![Text0]
    qry.Parameters("StopDate").Value = [Forms]![EndDate]![Text2]

    Set rs = qry.OpenRecordset(dbOpenSnapshot)  
    If Not (rs.EOF And rs.BOF) Then

'populate rs

    rs.MoveLast
    rs.MoveFirst

'start report generation loop

    Do While Not rs.EOF       

        temp = rs("Supervisor_Clean")
        MyFileName = rs("Supervisor_Clean") & Format(Date, ", mmm yyyy") & ".PDF"
        DoCmd.OpenReport "End Date Report", acViewReport, , "[Supervisor_Clean]='" & temp & "'"
        DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName
        DoCmd.Close acReport, "End Date Report"
        DoEvents

'start mail section

    open Outlook, attach zip folder or file, send e-mail
    Dim appOutLook As Outlook.Application
    Dim MailOutLook As Outlook.MailItem
    Set appOutLook = CreateObject("Outlook.Application")
    Set MailOutLook = appOutLook.CreateItem(olMailItem)

    With MailOutLook
        .SendUsingAccount = appOutLook.Session.Accounts.Item(2)
        .BodyFormat = olFormatRichText
        '.To = ""
        ''.cc = ""
        ''.bcc = ""
        .Subject = "Non-Employees with Expiring Building Access"
       .HTMLBody = "<html><body><p>Hello,</p><p>The attached report... </p></body></html>"
       .Attachments.Add (mypath & MyFileName)
        '.DeleteAfterSubmit = True 'This would let Outlook send the note without storing it in your sent bin
        .Display
    End With
'end mail section

        rs.MoveNext
    Loop
Else
    MsgBox "There are no records in the recordset."
End If
    MsgBox "Report generation complete."
    Set rs = Nothing
    Set db = Nothing
    Set qry = Nothing
End Sub

1 Ответ

0 голосов
/ 28 января 2020

Всплывающее окно для параметров может быть из-за неправильного синтаксиса здесь:

qry.Parameters("StartDate").Value = [Forms]![EndDate]![Text0]
qry.Parameters("StopDate").Value = [Forms]![EndDate]![Text2]

Попробуйте изменить его на:

qry.Parameters("StartDate").Value = Me.Text0
qry.Parameters("StopDate").Value = Me.Text2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...