Vba 手动发送电子邮件时记录的触发代码
我使用Excel VBA发送电子邮件。我想记录消息是否已发送 我从中获取了一些代码 我创建了如上所述的类,并添加了一些额外的位以查看它是否工作。Vba 手动发送电子邮件时记录的触发代码,vba,excel,email,outlook,Vba,Excel,Email,Outlook,我使用Excel VBA发送电子邮件。我想记录消息是否已发送 我从中获取了一些代码 我创建了如上所述的类,并添加了一些额外的位以查看它是否工作。 它会初始化,但随后不会发生其他任何事情。邮件发送后,该类在后台以某种方式保持打开状态,因此我必须在VBE中停止它 以下是呼叫代码: Sub SendProc2(添加为字符串) Set-OutApp=CreateObject(“Outlook.Application”) Set-OutMail=OutApp.CreateItem(0) 出错时继续下一步
它会初始化,但随后不会发生其他任何事情。邮件发送后,该类在后台以某种方式保持打开状态,因此我必须在VBE中停止它 以下是呼叫代码:
Sub SendProc2(添加为字符串)
Set-OutApp=CreateObject(“Outlook.Application”)
Set-OutMail=OutApp.CreateItem(0)
出错时继续下一步
发邮件
.To=添加
.CC=“”
.BCC=“”
.Subject=此工作簿。名称
.Body=Application.WorksheetFunction.VLookup(工作表(“数据”).Range(“B135”)、Range(“formversion”)、2、False)_
&“附件:”&vbCrLf&vbCrLf&ThisWorkbook.Name
.Attachments.add ActiveWorkbook.FullName
.Display'或use.Send
以
Dim CurrWatcher作为EmailWatcher
设置CurrWatcher=新的EmailWatcher
设置CurrWatcher.TheMail=OutMail
错误转到0
发送邮件=无
设置应用程序=无
卸载UserForm4
端接头
称为EmailWatcher的类模块代码:
选项显式
公共事件,邮件为Outlook.MailItem
私有子类_Terminate()
Debug.Print“Terminate”&Now()
端接头
专用子主题邮件发送(取消为布尔值)
Debug.Print“Send”&现在()
'在此处输入代码
端接头
私有子类_Initialize()
Debug.Print“Initialize”&Now()
端接头
它似乎从不注册\u Send
,我认为这可能与未定义类对象或其他原因有关。有时我会在初始化时收到警告,然后在不等待\u发送的情况下立即终止
在Windows 7上,通过我无法控制的本地机构网络使用Excel 2007。类
Private WithEvents EM As Outlook.MailItem
Public Sub INIT(x As Outlook.MailItem)
Set EM = x
End Sub
Private Sub EM_Send(Cancel As Boolean)
End Sub
模块
Public WATCHER As clsEmailWatch
Sub EMAIL()
Dim o As Outlook.Application
Dim m As Outlook.MailItem
Set o = New Outlook.Application
Set m = o.CreateItem(olMailItem)
Set WATCHER = New clsEmailWatch
WATCHER.INIT m
m.To = "xyz@abc.com"
m.Send
End Sub
希望这有帮助,这看起来像是在用户窗体运行时显示邮件
我遇到了同样的问题,即当用户表单存在时,Outlook事件没有注册。为了解决这个问题,我实施了一种黑客攻击:
在类或userform模块中需要布尔属性:
Private someBool as Boolean
您需要订阅并设置新的布尔值:
Private Sub TheMail_Close(Cancel As Boolean)
someBool = True
End Sub
关闭、发送或保存显示的电子邮件时引发此事件
那么您显然需要一个属性获取方法:
Public Property Get MailClosed() As Boolean
MailClosed = someBool
End Property
现在,要处理所有事件,您需要在显示邮件的模块中创建一个循环:
[...]
Dim CurrWatcher As EmailWatcher
Set CurrWatcher = New EmailWatcher
Set CurrWatcher.TheMail = OutMail
Do Until CurrWatcher.MailClosed
DoEvents
Loop
[...]
我不确定为什么有效,如果有人能解释一下,我会把它添加到我的答案中。这里还有输入代码吗?我想你是在邮件消失后把它设置成你的沉没类。Outmail应该是类对象,我相信嗯,我想我贴错了,我会编辑它。你试过我的代码了吗?