Сообщение Excel VBA после отправки почты Outlook - PullRequest
0 голосов
/ 11 декабря 2018

Я не эксперт в программировании на VBA, и мой вопрос может показаться глупым для некоторых, но я был бы признателен за вашу помощь с этим.

У меня есть превосходная пользовательская форма, которая после нажатия кнопки создает OutlookЭлектронная почта, и пользователь вручную щелкает опцию отправки по почте.

Моя проблема заключается в том, что система регистрирует содержимое электронной почты в базе данных Excel (только если пользователь нажимает на опцию отправки в Outlook).через класс Withevents), но если база данных недоступна, появляется сообщение об ошибке, которое должно подсказать пользователю, реальная проблема заключается в том, что подсказка не отображается для пользователя (покрыта электронной почтой 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

Я попытался сохранить пример кодамаксимально коротко и просто.

заранее благодарю за помощь

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Я наконец смог сделать это с помощью обходного пути, я не уверен, что это кому-нибудь поможет.

Я создал еще один наблюдатель событий, чтобы определить, когда окно электронной почты действительнозакрыто, и в соответствии с этим сообщение будет запущено.

это обновленный класс для обнаружения клика "Отправить" и события деактивации электронной почты:

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

Я добавил Boolean для проверки по вызову

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

Надеюсь, что все ясно и может помочьлюбой с подобной проблемой;спасибо всем за поддержку

0 голосов
/ 11 декабря 2018

Мне приходилось иметь дело с упрямыми приложениями.Попробуйте скрыть приложение, а затем показать его перед вашим сообщением.

If DB.ReadOnly Then
    Application.Visible = False
    Application.Visible = True
    MsgBox "Error Message Here"
End If

Возможно, это не самое элегантное решение, но оно обычно работает.

...