Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VBA中循环两个记录集以进行访问_Vba_Loops_Email_Ms Access_Recordset - Fatal编程技术网

在VBA中循环两个记录集以进行访问

在VBA中循环两个记录集以进行访问,vba,loops,email,ms-access,recordset,Vba,Loops,Email,Ms Access,Recordset,我正在尝试从一个名为“Deprog3”的查询向多个不同的收件人发送电子邮件记录。表单上的按钮需要循环浏览表单中的每条记录,并向收件人发送电子邮件(“Me.email”)。它发送的电子邮件应该从“Deprog3”查询中选择与该特定个人相关的所有记录 但实际情况是,它只在第一封电子邮件中发送特定于第一个人的记录,然后在第二封电子邮件中发送第一个人和第二个人的记录,依此类推,直到最后一封电子邮件包含查询中的所有记录 如果我注释掉第二行('Do While Me.Current Record…')和最后

我正在尝试从一个名为“Deprog3”的查询向多个不同的收件人发送电子邮件记录。表单上的按钮需要循环浏览表单中的每条记录,并向收件人发送电子邮件(“Me.email”)。它发送的电子邮件应该从“Deprog3”查询中选择与该特定个人相关的所有记录

但实际情况是,它只在第一封电子邮件中发送特定于第一个人的记录,然后在第二封电子邮件中发送第一个人和第二个人的记录,依此类推,直到最后一封电子邮件包含查询中的所有记录

如果我注释掉第二行('Do While Me.Current Record…')和最后一行的第二行('Loop'),它会去掉循环,意味着我必须继续单击“发送”,但它不会发送前几行的记录

任何指导都将不胜感激

Private Sub Send_Click()

Do While Me.CurrentRecord < Me.Recordset.RecordCount

DoCmd.RunSQL "delete * from sendfiletemp"
DoCmd.OpenQuery "Deprog3"

Dim MyDB As DAO.Database
Dim rst As DAO.Recordset

Set MyDB = CurrentDb
Set rst = MyDB.OpenRecordset("SendFileTemp", dbOpenForwardOnly)

strSMTPFrom = Me.From
strSMTPTo = Me.EMAIL
strBCC = Me.BCC
strSMTPRelay = "mail.vaioni.com"
strSubject = "Jobs requiring your attention"

With rst
  Do While Not .EOF
    MailBody = MailBody & ![serviceid] & " | " & ![status] & " | " & ![EventDate] & " | " & ![name] & vbCrLf
      .MoveNext
  Loop
End With

Set oMessage = CreateObject("CDO.Message")
oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPRelay
oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
oMessage.Configuration.Fields.Update

oMessage.From = strSMTPFrom
oMessage.To = strSMTPTo
oMessage.bcc = strBCC
oMessage.Subject = strSubject
oMessage.TextBody = "Can you please take a look at these jobs that remain open and close them down. Thanks  " & vbCrLf & " " & vbCrLf & MailBody & vbCrLf & " "

oMessage.Send

rst.Close
Set rst = Nothing

Me.Recordset.MoveNext

Loop

End Sub

Private Sub Send_Click()
当Me.CurrentRecord
使用记录集需要表单的第一条记录具有焦点。建议您使用RecordsetClone

在每次迭代结束时,将MailBody设置为空字符串

考虑:

strSMTPRelay = "mail.vaioni.com"'

With Me.RecordsetClone
Do While Not .EOF

    Set rst = MyDB.OpenRecordset("SendFileTemp", dbOpenForwardOnly)
    With rst
    Do While Not .EOF
        MailBody = MailBody & ![serviceid] & " | " & ![status] & " | " & ![EventDate] & " | " & ![name] & vbCrLf
        .MoveNext
    Loop
    End With
    rst.Close

    Set oMessage = CreateObject("CDO.Message")
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPRelay
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    oMessage.Configuration.Fields.Update

    oMessage.From = !From
    oMessage.To = !EMAIL
    oMessage.bcc = !BCC
    oMessage.Subject = "Jobs requiring your attention"
    oMessage.TextBody = "Can you please take a look at these jobs that remain open and close them down. Thanks  " _
                        & vbCrLf & " " & vbCrLf & MailBody & vbCrLf & " "
    oMessage.Send
    MailBody = ""
    .MoveNext
Loop
End With

使用记录集要求窗体的第一条记录具有焦点。建议您使用RecordsetClone

在每次迭代结束时,将MailBody设置为空字符串

考虑:

strSMTPRelay = "mail.vaioni.com"'

With Me.RecordsetClone
Do While Not .EOF

    Set rst = MyDB.OpenRecordset("SendFileTemp", dbOpenForwardOnly)
    With rst
    Do While Not .EOF
        MailBody = MailBody & ![serviceid] & " | " & ![status] & " | " & ![EventDate] & " | " & ![name] & vbCrLf
        .MoveNext
    Loop
    End With
    rst.Close

    Set oMessage = CreateObject("CDO.Message")
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = strSMTPRelay
    oMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
    oMessage.Configuration.Fields.Update

    oMessage.From = !From
    oMessage.To = !EMAIL
    oMessage.bcc = !BCC
    oMessage.Subject = "Jobs requiring your attention"
    oMessage.TextBody = "Can you please take a look at these jobs that remain open and close them down. Thanks  " _
                        & vbCrLf & " " & vbCrLf & MailBody & vbCrLf & " "
    oMessage.Send
    MailBody = ""
    .MoveNext
Loop
End With

您应该在模块头中有显式选项,并在过程开始时声明所有变量,为什么不直接从表单记录中打开由收件人筛选的记录集?您应该在模块标题中有显式选项,并在过程开始时声明所有变量。为什么不直接从表单记录中打开由收件人筛选的记录集,而不是将记录写入SendFileTemp?