我正在尝试使用此代码通过电子邮件发送附件。但他们将有几百个附件,所以我不希望用户需要与电子邮件客户端进行交互。任何建议都将不胜感激。
Private Sub CreateReports_Click()
Dim x As String
Dim y As String
Dim StrSQL As String
Dim stWhereStr As String 'Where Condition'
Dim stSection As String 'Selection from drop down list
Dim stfile As String
Dim stDocName As String
Dim StrEmail As String
StrSQL = "SELECT DISTINCTROW [OPDA ISSR- Courts Users by District/Cir].[Sup], [OPDA ISSR- Courts Users by District/Cir].SupEmail " & _
"FROM [OPDA ISSR- Courts Users by District/Cir];"
y = Year(Date)
Dim db As DAO.Database
Dim rst As DAO.Recordset
Set db = CurrentDb
Dim qdTemp As DAO.QueryDef
Set qdTemp = db.CreateQueryDef("", StrSQL)
Set rst = qdTemp.OpenRecordset()
If rst.EOF And rst.BOF Then
MsgBox "No data available for the Ledger Process routine."
Else
Debug.Print rst.Fields.Count
rst.MoveFirst
Do While Not rst.EOF
x = rst![Sup]
StrEmail = rst![Supemail]
stDocName = "Courts - ISSR Recertification Report"
stWhereStr = "[OPDA ISSR- Courts Users by District/Cir].[SUP]= '" & x & "'"
stfile = "P:\DFI\FIB\Access Tables\FibCustomers\ISSR Reports\Courts\" & x & " - " & y & " FedInvest InvestOne Recertification.pdf"
DoCmd.OpenReport stDocName, acPreview, , stWhereStr
DoCmd.SendObject acSendReport, stDocName, acFormatPDF, StrEmail, , , "My Subject here", "your report"
DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, stfile
DoCmd.Close acReport, stDocName
rst.MoveNext
Loop
End If
rst.Close
Set rst = Nothing
End Sub
答案 0 :(得分:1)
您可以使用本地电子邮件客户端的API并打开隐藏的实例来创建和发送电子邮件(例如Outlook,Lotus Notes),也可以使用CDO对象。
http://www.rondebruin.nl/win/s1/cdo.htm
即使上面的示例是在Excel中,代码也很有用。如果您正在使用CDO对象,唯一需要确保的是必要的端口是否打开。如果您想使用特定的电子邮件客户端,还要查看此问题的相关主题,大量有效信息。
答案 1 :(得分:0)
发送无人值守电子邮件的最佳方法是使用SMTP。绕过MAPI安全提示并不是一个好主意。
我们的Total Access Emailer插件程序使用SMTP,因此您可以为用户广播大量电子邮件。 Total Access Emailer允许您向列表中的每个人发送个性化电子邮件,并在邮件和主题中嵌入记录中的字段。它还可以将Access报告附加为为每个收件人筛选的PDF文件,以便每个人只能看到他们的数据。其Wizard界面无需编程。如果要自动化VBA库,则可以使用它。更多信息:http://www.fmsinc.com/MicrosoftAccess/Email.asp
提供免费试用:http://www.fmsinc.com/MicrosoftAccess/Email/free-trial.html