我不是VBA编程专家,对某些人来说,我的问题听起来很愚蠢,但是我很感谢您的协助。
我有一个excel用户窗体,单击该按钮即可生成Outlook电子邮件,然后用户手动单击邮件上的发送选项。
我的问题是系统将在Excel数据库中注册电子邮件内容(仅当用户通过Withevents类单击Outlook中的“发送选项”时),但是如果数据库不可用,则会出现错误消息它应该提示用户,真正的问题是该提示没有显示给用户(由Outlook电子邮件覆盖),因为正在处理excel代码,并且电子邮件发送过程将等待完成。无论如何,我是否可以在Outlook顶部显示消息框或运行代码以保存到数据库,但是仅在单击“发送”选项之后? 以下是我正在使用的代码,感谢您的反馈
用户窗体中的以下代码可填充并在Outlook中显示电子邮件
Public itmevt As New CMailItemEvents
Public Outapp As Outlook.Application
Public Outmail As Outlook.MailItem
public subject as string
public body as string
Private Sub SendMail_Click()
Set Outapp = New Outlook.Application
Set Outmail = Outlook.Application.CreateItem(0)
Set itmevt.itm = Outmail
body=userform.text1.text
subject=userform.text2.text
itmevt.itm.Subject = "Some Subject"
With itmevt.itm
.HTMLBody = Body
.Subject = subject
.Display
End With
这是名为(CMailItemEvents)的类的代码,用于检测发送选项单击
Option Explicit
Public WithEvents itm As Outlook.MailItem
Private Sub itm_Send(Cancel As Boolean)
EmailsForm.savedetails
End Sub
一旦单击“发送选项”,将运行保存的代码
sub savedetails()
--->Open Excel DB
If DB.ReadOnly Then
Msgbox ("Error Message Here") ----> here is the problem, the message shows on excel
--- but the outlook mail is on the front of the screen
exit sub
else
--->Save details to DB
End Sub
我试图使代码示例尽可能简短。
预先感谢您的帮助
答案 0 :(得分:0)
我不得不自己处理顽固的应用程序。尝试隐藏该应用程序,然后将其显示在msgbox之前。
If DB.ReadOnly Then
Application.Visible = False
Application.Visible = True
MsgBox "Error Message Here"
End If
可能不是最优雅的解决方案-但这通常有效。
答案 1 :(得分:0)
我终于可以通过一种解决方法来做到这一点,我不确定这是否会帮助任何人。
我创建了另一个事件观察器,以检测实际何时关闭“电子邮件”窗口,并据此触发消息。
这是更新的类,用于检测“发送点击”和“禁用电子邮件”事件:
Option Explicit
Public WithEvents itm As Outlook.MailItem
Public WithEvents appv As Inspector ----> this part is added
Public Sent as Boolean
Private Sub itm_Send(Cancel As Boolean)
Sent=True ---> Sending E-mail Check
EmailsForm.ETo = itm.To
EmailsForm.ECC = itm.CC
EmailsForm.savedetails
End Sub
---This Part Is Added---
Private Sub appv_Deactivate()
If Sent = True then ---> Sending E-mail Check To Avoid Triggering the watcher if the E-mail is closed without sending
if EmailsForm.Bool=true then
msgbox ("Error Message Here")
EmailsForm.Book=False
Sent=False
End If
End If
End Sub
当用户单击用户上的按钮时,它触发以下代码:
Public itmevt As New CMailItemEvents
Public Outapp As Outlook.Application
Public Outmail As Outlook.MailItem
public subject as string
public body as string
Private Sub SendMail_Click()
Set Outapp = New Outlook.Application
Set Outmail = Outlook.Application.CreateItem(0)
Set itmevt.itm = Outmail
Set itmevt.appv = Outmail.GetInspector ----> this is added to link the E-mail window to the deactivation trigger
body=userform.text1.text
subject=userform.text2.text
itmevt.itm.Subject = "Some Subject"
With itmevt.itm
.HTMLBody = Body
.Subject = subject
.Display
End With
我添加了一个布尔值,可以从通话中进行检查
public Bool as Boolean
sub savedetails()
Bool=false ---> Boolean to be checked by the class
--->Open Excel DB
If DB.ReadOnly Then
Bool=true
exit sub
else
--->Save details to DB
End Sub
我希望上面的内容很清楚,可以为遇到类似问题的任何人提供帮助;谢谢大家的支持