Редактировать 2: Я обновил код, основываясь на комментариях Дмитрия Стребченко и Тима Уильямса.Спасибо вам обоим!Обновленный код ниже.Моя единственная проблема сейчас заключается в том, что когда я отменяю, он по-прежнему отправляет электронное письмо.
Редактировать: я обновил код на основе комментариев от Дмитрия Стребленченко.В результате Outlook больше не закрывается, когда я отменяю отправку электронной почты.Однако вместо того, чтобы возвращаться к электронному письму, оно все равно отправляет электронное письмо.
Я нашел некоторый код для макроса, который я использую, чтобы спросить, в какой папке сохранить электронное письмо.когда я нажимаю отправить.Когда я нажимаю кнопку «Отправить», открывается диалоговое окно с вопросом, где сохранить отправленное электронное письмо.
Однако, когда я решаю, что больше не хочу отправлять электронное письмо, и нажимаю «Отмена», а неВозвращаясь к электронной почте, я получаю сообщение об ошибке «IsInDefaultStore», которое гласит: «Эта функция не предназначена для работы с объектами Nothing и возвращает False».Затем, после нажатия OK в диалоговом окне, я получаю сообщение об ошибке:
Ошибка времени выполнения '91': переменная объекта или переменная блока не установлена
Когда я нажимаю Отладка, подсвечиваются следующие строки
If Not objFolder Is Nothing And _
IsInDefaultStore(objFolder) And _
objFolder.DefaultItemType = olMailItem Then
Я бы хотел, чтобы макрос ничего не делал, когда нажимал Отмена.Например, если я осознаю, что после нажатия «Отправить», я хотел бы добавить что-либо к электронному письму, я бы хотел иметь возможность нажать «Отмена» в диалоговом окне с вопросом, где сохранить, и вернуться к редактированию моегоЭл. адрес.Я хотел бы, чтобы диалоговое окно снова появлялось, когда я нажимаю Отправить во второй раз.
Любая помощь будет оценена - спасибо!
Обновлен код, основанный на уже полученных комментариях:
Private Sub Application_ItemSend(ByVal Item As Object, _
Cancel As Boolean)
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Set objNS = Application.Session
If (objFolder Is Nothing) Then Set objFolder = Application.Session.GetDefaultFolder(olFolderSentMail)
Set Item.SaveSentMessageFolder = objFolder
If Item.Class = olMail Then
Set objFolder = objNS.PickFolder
If Not objFolder Is Nothing Then Exit Sub
End If
Set objFolder = Nothing
Set objNS = Nothing
End Sub
Public Function IsInDefaultStore(objOL As Object) As Boolean
Dim objApp As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objInbox As Outlook.MAPIFolder
Dim blnBadObject As Boolean
On Error Resume Next
Set objApp = objOL.Application
If Err = 0 Then
Set objNS = objApp.Session
Set objInbox = objNS.GetDefaultFolder(olFolderInbox)
Select Case objOL.Class
Case olFolder
If objOL.StoreID = objInbox.StoreID Then
IsInDefaultStore = True
Else
IsInDefaultStore = False
End If
Case olAppointment, olContact, olDistributionList, _
olJournal, olMail, olNote, olPost, olTask
If objOL.Parent.StoreID = objInbox.StoreID Then
IsInDefaultStore = True
Else
IsInDefaultStore = False
End If
Case Else
blnBadObject = True
End Select
Else
blnBadObject = True
End If
If blnBadObject Then
MsgBox "This function isn't designed to work " & _
"with " & TypeName(objOL) & _
" objects and will return False.", _
, "IsInDefaultStore"
IsInDefaultStore = False
End If
Set objApp = Nothing
Set objNS = Nothing
Set objInbox = Nothing
End Function