我正在尝试向他们单独的员工发送他们的部分/报告的PDF /页面。该信息基于其EmployeeID(文本不长号)。因此,每个人在页面上都有他们的余额信息然后有一个分页符,然后下一页显示下一个人的详细信息。使用下面的代码,它会向每个员工发送一个页面的电子邮件,但它恰好只会将第一个人的页面通过电子邮件发送给每个人。是否有可能以某种方式每周自动化,以便每个用户通过电子邮件发送他/她的报告的单个页面?
另一个错误是电子邮件逐个弹出,所以我每次都要按200多人发送电子邮件,电子邮件似乎是发送到电子邮件,然后是#mailto:电子邮件#例如email @ email .COM#至mailto:[email protected]#
我刚开始使用Access,并且一直在复制并从我在网上找到的地方抓取代码。非常感谢,如果你能提供帮助!
祝你有美好的一天!
Private Sub cmdSendAll_Click()
Dim rsAccountNumber As DAO.Recordset
Dim strTo As Variant
Dim strSubject As String
Dim strMessageText As String
Set rsAccountNumber = CurrentDb.OpenRecordset("SELECT DISTINCT EmployeeID, [Email] FROM [queAutoUpdate]", dbOpenSnapshot)
Debug.Print strTo
With rsAccountNumber
Do Until .EOF
DoCmd.OpenReport "test", _
acViewPreview, _
WhereCondition:="EmployeeID = '" & !EmployeeID & "'", _
WindowMode:=acHidden
strTo = ![Email]
strSubject = "Updated Balance "
strMessageText = "Text Here"
DoCmd.SendObject ObjectType:=acSendReport, _
ObjectName:="test", _
OutputFormat:=acFormatPDF, _
To:=strTo, _
Subject:=strSubject, _
MESSAGETEXT:=strMessageText, _
EditMessage:=True
DoCmd.Close acReport, "Unaffirmed Report", acSaveNo
.MoveNext
Loop
.Close
End With
End Sub
您打开一个名为test的报告,然后关闭另一个名为“Unaffirmed Report”的报告。您需要打开和关闭相同的报告,在本例中为“test”。 DoCmd.Close acReport, "test", acSaveNo
。这应该可以修复员工数据未更新,因为报告在第一个员工上保持打开状态。
要直接发送消息,您需要将qazxsw poi更改为qazxsw poi。检查文档:qazxsw poi
此外,如果您需要对此进行测试,请在脱机模式下设置outlook,然后运行您的代码,检查发件箱中的消息,看看它们是否符合预期。您可以从发件箱中删除邮件,以防止发送邮件。完成测试后,可以将Outlook设置回在线模式。
关于电子邮件地址问题,在控件中使用超链接时会自动出现。你需要用EditMessage:=True
剥掉额外的部分。检查您的数据是否对所有电子邮件地址有效。要获得更高级的解决方案,您可以查看这篇文章EditMessage:=False
。
代码作为参考提供,请参阅帖子以获得解释。
https://docs.microsoft.com/en-us/office/vba/api/access.docmd.sendobject
考虑使用MS Outlook对象库发送电子邮件。 strTo = Left(![Email],InStr(![Email],"#")-1)
是一个便利处理程序,您可以通过初始化Outlook应用程序对象并创建设置所有必需元素的Outlook电子邮件对象来控制更多进程。
但是,使用此方法,您需要先将过滤后的报告导出为PDF,然后附加到电子邮件以进行最终发送。有关具体细节,请参阅内联注释。
https://codekabinett.com/rdumps.php?Lang=2&targetDoc=access-hyperlink-data-type