我如何通过 VBA 代码看到 outlook 对象已关闭
How can I by VBA code see that outlook object is closed
我使用 Outlook 使用以下代码编辑主题和正文:
Sub SetupEmailTexts()
Dim olApp As Object
Dim olNameSpace As Object 'Outlook.NameSpace
Dim MailFolder As Object 'Outlook.MAPIFolder
Dim MyMail As Object 'Outlook.MailItem
GetSetup
Set olApp = CreateObject("Outlook.Application")
Set olNameSpace = olApp.GetNamespace("MAPI")
Set MailFolder = olNameSpace.GetDefaultFolder(16)
Set MyMail = MailFolder.Items.Add
MyMail.Display
MyMail.Subject = SubjectString
MyMail.HTMLBody = BodyString
MsgBox ("Edit subject and body before pressing OK")
If Not IsNull(MyMail) Then
PutSubjectBody MyMail.Subject, MyMail.HTMLBody
MyMail.Close olDiscard
End If
End Sub
如果我在按代码生成的消息框中的确定之前关闭 Outlook,我会在行 "PutSubjectBody MyMail.Subject, MyMail.HTMLBody" 中收到运行时错误 "The remote server machine does not exist or is unavailable"。
如您所见,我尝试使用 IsNull 来确定 MyMail 是否仍然是 "alive"。
我可以用什么代替 "IsNull"?
您可以尝试使用错误处理 -
在子
的开头添加行
On Error goto err
在子句末尾添加:
NoError:
exit sub
err:
msgbox "you closed outlook. couldn't do my thing"
在这种情况下,我会使用 On Error
,检测特定的 Err.Number
并优雅地处理它。
自动化对象的关闭不会反映在 MyMail
变量本身的状态中,它需要实现一个 IsConnectedToInstance
属性,它确实没有。
您可以连接事件 Outlook.Application.Quit
但随后您需要检查一个标志,并且在某些情况下会错过它。
我使用 Outlook 使用以下代码编辑主题和正文:
Sub SetupEmailTexts()
Dim olApp As Object
Dim olNameSpace As Object 'Outlook.NameSpace
Dim MailFolder As Object 'Outlook.MAPIFolder
Dim MyMail As Object 'Outlook.MailItem
GetSetup
Set olApp = CreateObject("Outlook.Application")
Set olNameSpace = olApp.GetNamespace("MAPI")
Set MailFolder = olNameSpace.GetDefaultFolder(16)
Set MyMail = MailFolder.Items.Add
MyMail.Display
MyMail.Subject = SubjectString
MyMail.HTMLBody = BodyString
MsgBox ("Edit subject and body before pressing OK")
If Not IsNull(MyMail) Then
PutSubjectBody MyMail.Subject, MyMail.HTMLBody
MyMail.Close olDiscard
End If
End Sub
如果我在按代码生成的消息框中的确定之前关闭 Outlook,我会在行 "PutSubjectBody MyMail.Subject, MyMail.HTMLBody" 中收到运行时错误 "The remote server machine does not exist or is unavailable"。 如您所见,我尝试使用 IsNull 来确定 MyMail 是否仍然是 "alive"。 我可以用什么代替 "IsNull"?
您可以尝试使用错误处理 -
在子
的开头添加行On Error goto err
在子句末尾添加:
NoError:
exit sub
err:
msgbox "you closed outlook. couldn't do my thing"
在这种情况下,我会使用 On Error
,检测特定的 Err.Number
并优雅地处理它。
自动化对象的关闭不会反映在 MyMail
变量本身的状态中,它需要实现一个 IsConnectedToInstance
属性,它确实没有。
您可以连接事件 Outlook.Application.Quit
但随后您需要检查一个标志,并且在某些情况下会错过它。