Ms access 如何基于变量Access 2007填充电子邮件正文
我正在编写一个Access 2007应用程序,它发送一封电子邮件,并根据一个变量选择电子邮件的正文。我将每个可选电子邮件存储在一个表中。我当前的代码如下所示:Ms access 如何基于变量Access 2007填充电子邮件正文,ms-access,vba,ms-access-2007,Ms Access,Vba,Ms Access 2007,我正在编写一个Access 2007应用程序,它发送一封电子邮件,并根据一个变量选择电子邮件的正文。我将每个可选电子邮件存储在一个表中。我当前的代码如下所示: Dim MyMail As Outlook.MailItem Dim WhatEmail As Integer Set WhatEmail = 3 MyMail.Body = "SELECT [Emails].[Body] FROM [Emails] WHERE EmailNumber = WhatEmail" “我的电子邮件”表
Dim MyMail As Outlook.MailItem
Dim WhatEmail As Integer
Set WhatEmail = 3
MyMail.Body = "SELECT [Emails].[Body] FROM [Emails] WHERE EmailNumber = WhatEmail"
“我的电子邮件”表有两列EmailNumber(整数)和Body
我收到一个编译错误:
应为:行号、标签、语句或语句结尾
你的代码不会做任何有意义的事情;您的
“SELECT…”
语句只是一个字符串,并且(如果代码确实有效),它会将消息正文设置为:“SELECT[Emails].[body]…”
想必根本不是你想要的
相反,我们必须使用DAO(或类似工具)从数据库中获取消息体
Public Sub sendMail()
Dim WhatEmail As Integer
Dim strSQL As String, strMessageBody As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim oApp As Outlook.Application
Dim oMail As MailItem
WhatEmail = 2
strSQL = "SELECT [Body] FROM [Emails] WHERE EmailNumber = " & WhatEmail
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
If (rs.EOF And rs.BOF) Then
Debug.Print "No matching email found"
Exit Sub
End If
rs.MoveFirst
strMessageBody = rs![Body]
rs.Close
Set rs = Nothing
Set db = Nothing
Set oApp = CreateObject("Outlook.Application")
Set oMail = oApp.CreateItem(olMailItem)
oMail.Body = strMessageBody
oMail.Subject = "subject of email"
oMail.To = "name@domain.com"
oMail.Send
Set oMail = Nothing
Set oApp = Nothing
End Sub
关于更改原始文件的注意事项: 变量
WhatEmail
现在位于字符串的引号之外,因此VBA使用变量的值,而不是文本“WhatEmail”。这意味着我们将strSQL
设置为
"SELECT [Body] FROM [Email] WHERE EmailNumber = 2"
(或设置WhatEmail变量的任何数字),而不是
"SELECT [Body] FROM [Email] WHERE EmailNumber = WhatEmail"
然后,我们使用DAO加载一个记录集,并将此SQL字符串作为参数。它希望只返回一条记录(我们的电子邮件
表中的正确行)-但是如果出现问题并且表中没有匹配的电子邮件号码
,我们将在即时窗口中收到一条消息(“找不到匹配的电子邮件”),该过程将退出
否则,我们将查看表中的记录(rs.MoveFirst
),然后使用rs![正文]
注意:我假设在Emails
表中最多有一个条目具有匹配的EmailNumber-在我的数据库中,它是主键