ACCESS VBA自动发送邮件,但是只能发送一封邮件,不能循环,求大神帮忙

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ACCESS VBA自动发送邮件,但是只能发送一封邮件,不能循环,求大神帮忙相关的知识,希望对你有一定的参考价值。

VBA代码:

Sub SendToSubjBody(strTo As String, _
bolhtml As Boolean, _
strSubj As String, _
strBody As String, _
AttachmentFileName As String, _
Optional AutoSend As Boolean = True)

Dim ola1 As Outlook.Application
Dim mai1 As Outlook.MailItem
Dim atts As Outlook.Attachments
Dim newAttachment As Outlook.Attachment
Set ola1 = New Outlook.Application
Set mai1 = ola1.CreateItem(olMailItem)
mai1.To = strTo '地址
mai1.Subject = strSubj '主题
If bolHTML = True Then
mai1.HTMLBody = strBody '内容
Else
mai1.Body = strBody
End If

If AutoSend = True Then
On Error GoTo continue
SendEmail:
mai1.Display
DoEvents
DoEvents
DoEvents
SendKeys "%(s)", Wait:=True '打开Outlook新建的邮件,点击Alt+s发送
DoEvents
mai1.Display
GoTo SendEmail '循环判断,直到新建的邮件被发送出去
continue:
On Error GoTo 0
' mai1.Send
Else
mai1.Save
End If
ola1.Quit
Set ola1 = Nothing
'MsgBox "发送邮件完成!"
End Sub

Private Sub Command0_Click()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("联系人")
rst.MoveLast
rst.MoveFirst
Do Until rst.EOF
SendToSubjBody rst!emailaddress, 0, "AL-KO订单交期提醒", rst!Attachment, False 'AtuoSend参数为False,邮件将会存放在草稿箱或者发件箱里面,具体根据用户OutLook的设置
rst.MoveNext
Loop
MsgBox rst.RecordCount & "个邮件已经发送出去"

End Sub

显示如图

我感觉是你发邮件的代码中,留的等待时间远远不够. 代码一下子就循环完了,但邮件根本没有来得及发出去就执行到结尾了,试试增加WAIT语句看看有没有用. 我说得也不一定对,没有真实代码调试,供参考.追问

我代码写错了,最后不应该退出,谢谢你

参考技术A office vba问题帮解决

使用 VBA 从 MS Access 发送电子邮件

【中文标题】使用 VBA 从 MS Access 发送电子邮件【英文标题】:Using VBA to send email from MS Access 【发布时间】:2021-11-21 21:26:24 【问题描述】:

你好 *** 成员

我是一名长期使用 MS Access 的用户,他已远离 VBA 和 SQL,并创建了一个表单,并希望使用从子表单捕获数据的按钮(基于查询)发送电子邮件。

我使用这个YouTube 视频作为指导,但遇到了卡住(从“msg =...”开始,当我尝试运行代码时(如下)。

不胜感激。

Private Sub cmd_EmailContact_Click()

    Dim Msg As String
    
    **msg = "Dear " & First name & ",<P>" & _
        Student First name & "has been successfully been loaded on the platform" & ",<P>" & _
        "Student login details on the platform are:" & ",<P>" & _
        "Username:" & Username & ",<P>" & _
        "Password:" & Password**

    Dim O As Outlook.Application
    Dim M As Outlook.MailItem
    
    Set O = New Outlook.Application
    Set M = O.CreateItem(olMailItem)
    
    With M
        .BodyFormat = olFormatHTML
        .HTMLBody = Msg
        .To = Email
        .Subject = "Student available on OARS"
        .Display        
    End With
    
    Set M = Nothing
    Set O = Nothing

End Sub

【问题讨论】:

这能回答你的问题吗? Sending Email using Access VBA 什么是Student First name?你认为这是某种变量名吗? fwiw,我不建议使用 youtube 来学习如何编码。 您真正要问的是“如何使用变量在多行上创建字符串?”因为其余代码都很好(与实际从任何地方发送电子邮件无关),尽管我认为不需要.BodyFormat 尝试使用msg = "Test" 而不是设置msg 的代码块,它应该可以工作。 感谢您对 BraX 的建议。我会试试 msg = "Test"。我想在电子邮件的正文中包含以下变量。在表单上的查询中填充变量。 - 名字(教师姓名) - 学生名字 - 用户名 - 密码 【参考方案1】:

要以 HTML 格式发送电子邮件,您需要使用 HTML 标记格式化正文并设置olMailItem(电子邮件)的HTMLBody 属性,如下所示。

该示例使用后期绑定(无需引用 Outlook),这意味着它可以在安装了不同版本的 Outlook 时运行。

Private Sub cmd_EmailContact_Click()

    Dim firstName As String, _
        studentFirstName As String, _
        userName As String, _
        password As String, _
        email As String, _
        body_ As String
    
    'provide values
    firstName = "ABC"
    studentFirstName = "XYZ"
    userName = "User"
    password = "Pass"
    email = "foo@bar.com"
    
    'build body
    body_ = "<p> Dear" & firstName & ", </p>" _
          & "<p>" & studentFirstName & " has been successfully been loaded on the platform. </p>" _
          & "<p> Student login details on the platform are: </p>" _
          & "<p> Username: " & userName & "</p>" _
          & "<p> Password: " & password & "</p>"

    'send email
    With CreateObject("Outlook.Application")
        With .CreateItem(0) 'olMailItem
            .BodyFormat = 2 'olFormatHTML
            .To = email
            .Subject = "Student available on OARS"
            .HTMLBody = "<html><head></head><body>" & body_ & "</body></html>"
            .Display
        End With
    End With
    
End Sub

您需要为以下变量提供值:

名字 学生名字 用户名 密码 电子邮件

【讨论】:

以上是关于ACCESS VBA自动发送邮件,但是只能发送一封邮件,不能循环,求大神帮忙的主要内容,如果未能解决你的问题,请参考以下文章

访问每个公司的 2007 VBA 报告电子邮件

如何确定使用VBA以何种语言编写电子邮件

使用 Excel VBA 以编程方式禁止 Outlook 电子邮件发送警告消息

EXCEL VBA 自动发送邮件功能异常

使用 VBA 从 MS Access 发送电子邮件

从 MS Access 生成带有超链接的电子邮件