此VBA在我们转换为Office 2016之前工作。我有2个数据库相同的VBA但停在不同的地方。我尝试用电子邮件地址替换8G5DB,但仍无法正常工作
Set objOutlookRecip = .Recipients.Add("8G5DB")
一个停在第一行,另一个停在
Set objOutlookRecip = .Recipients.Add("8G5DB")
这是我的代码:
Private Sub IRR_requested_AfterUpdate()
Dim objOutlook As Outlook.Application
Dim objOutlookMsg As Outlook.MailItem
Dim objOutlookRecip As Outlook.Recipient
Set dbs = CurrentDb
' Set rst = dbs.OpenRecordset("tblCIPReqEmails")
' rst.MoveFirst
Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add("8G5DB")
objOutlookRecip.Type = olTo
.Subject = "IRR Requested"
.Body = "SSN: " & Forms!frmAccession!SSN & vbCrLf & vbCrLf & " Employee Name: " & Forms!frmAccession![First Name] & " " & Forms!frmAccession![Middle Name] & " " & Forms!frmAccession![Last Name] & vbCrLf & vbCrLf & " IRR Requested: " & Forms!frmAccession![IRR requested] & vbCrLf & vbCrLf & "What Prior service is missing and dates of service" & vbCrLf & vbCrLf & "Give OPF to Specialist" & vbCrLf & vbCrLf & "Thank You." & vbCrLf & vbCrLf
.Importance = olImportanceHigh
For Each objOutlookRecip In .Recipients
objOutlookRecip.Resolve
If Not objOutlookRecip.Resolve Then
objOutlookMsg.Display
End If
Next
' .Send
objOutlookMsg.Display
End With
Set objOutlookMsg = Nothing
Set objOutlook = Nothing
End Sub
编辑 - 来自评论
检查以下参考文献:
答案 0 :(得分:1)
看起来你需要对基本的VBA编码做更多的阅读 - 特别是关于事情的故障排除和调试 - 每个编码人员都必须知道如何跨越他们的行并检查变量的内容以找到问题。
话虽如此,假设您没有引用Outlook库,如何简化测试代码以查看是否可以发送电子邮件
Private Sub IRR_requested_AfterUpdate()
' assume no references to Outlook
' Define Outlook constants to be used
' https://msdn.microsoft.com/en-us/library/office/aa219371(v=office.11).aspx
Const olTo as Integer = 1
Const olMailItem As Integer = 0
Dim objOutlook As Object
Dim objOutlookMsg As Object
Dim objOutlookRecip As Object
'~~> Establish an Outlook application object if it is already open
On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
'~~> If not then, launch it
If Err.Number <> 0 Then
Set objOutlook = CreateObject("Outlook.Application")
End If
Err.Clear
On Error GoTo 0
Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
With objOutlookMsg
Set objOutlookRecip = .Recipients.Add("8G5DB")
objOutlookRecip.Type = olTo
objOutlookRecip.Resolve
.Subject = "IRR Requested"
.Body = "SSN: Test"
.Send
.Display
End With
Set objOutlookMsg = Nothing
Set objOutlook = Nothing
End Sub
答案 1 :(得分:0)
它无法识别objOutlookMsg的参数。尝试:
Set objOutlookMsg = objOutlook.CreateItem(0)
另外,请确保Option Explicit
位于模块的顶部。
答案 2 :(得分:0)
所以......
在您的问题和评论中,您在数据库中列出了以下参考资料:
•应用程序的可视化基础;
•Microsoft Access 16.0对象库;
•OLE自动化
•Microsoft Office 16.0 Access数据库引擎Object Libary
如前所述@dbmitch,要运行Outlook自动化,您需要Microsoft Outlook XX.X Library
的引用。如果你添加它,它可能会解决你的问题。 Microsoft Office对象库不会删除它。