停止Excel打开另一个Outlook窗口
我使用Excel vba宏打开特定的Outlook收件箱子文件夹,但Outlook子文件夹会在新的Outlook窗口中打开 其结果是,如果不手动关闭新窗口,则在多次运行宏后,会打开多个Outlook窗口 我如何修改代码,使Outlook只需在现有的单个窗口中导航到所需的子文件夹 当前,新的Outlook窗口将在我的Excel电子表格顶部打开。运行宏时,我希望Outlook的当前实例转到所需的子文件夹,并显示在Excel电子表格的顶部 我没有写下面的代码。我已经将下面的代码合并到了一个更大的宏中,但其余的代码与此无关停止Excel打开另一个Outlook窗口,excel,vba,outlook,Excel,Vba,Outlook,我使用Excel vba宏打开特定的Outlook收件箱子文件夹,但Outlook子文件夹会在新的Outlook窗口中打开 其结果是,如果不手动关闭新窗口,则在多次运行宏后,会打开多个Outlook窗口 我如何修改代码,使Outlook只需在现有的单个窗口中导航到所需的子文件夹 当前,新的Outlook窗口将在我的Excel电子表格顶部打开。运行宏时,我希望Outlook的当前实例转到所需的子文件夹,并显示在Excel电子表格的顶部 我没有写下面的代码。我已经将下面的代码合并到了一个更大的宏中,
Dim MyOutLookApp As Object
Dim MyNameSpace As Object
Dim MyFolder As Object
Dim This As Variant
'// Late Binding
Set MyOutLookApp = CreateObject("Outlook.Application") '''I have also tried using = GetObject(, "Outlook.Application").... no change
Set MyNameSpace = MyOutLookApp.GetNamespace("MAPI")
On Error GoTo ErrFlder
Set MyFolder = MyNameSpace.GetDefaultFolder(olFldr.olFolderInbox)
Set MyFolder = MyFolder.Folders
Set This = MyFolder
Set This = MyFolder(strJobName) '''strJobname is a string picked up from elsewhere. It is simply the name of the inbox subfolder I want to go to.
This.display
End Sub
从我的回答到:(实际上是a)
使用Excel等应用程序时,重要的是
确保应用程序对象正确。退出/。当
完成它们(并将所有对象设置为无
),否则
存在无意中运行多个实例的风险,
这可能导致内存泄漏,从而导致崩溃和潜在的
数据丢失
要检查是否存在Outlook的现有实例,请使用以下命令
功能:
Function IsOutlookOpen()
'returns TRUE if Outlook is running
Dim olApp As Outlook.Application
On Error Resume Next
Set olApp = GetObject(, "Outlook.Application")
On Error GoTo 0
If olApp Is Nothing Then
IsOutlookOpen= False
Else
IsOutlookOpen= True
End If
End Function
有关从源中打开Office应用程序的新实例与现有实例的详细信息:如果您只想导航到其现有单个窗口中的子文件夹,请使用
下面的示例使用在同一窗口应用程序中激活收件箱下的子文件夹
名称“Temp”
您的代码总是调用MAPIFolder.Display
,因此每次都会得到一个新的资源管理器窗口。
改为执行以下操作
if MyOutLookApp.ActiveExplorer Is Nothing Then
This.Display
Else
set MyOutLookApp.ActiveExplorer.CurrentFolder = This
End If
可能的重复见下面我的答案-这就是你想要做的吗?当你有一辆悍马时,一切看起来都像钉子。我在另一个帖子中发布了这条评论,以回应您的回答,所以我将再次发布:绝对不是-Outlook是一个单例。无论您创建Outlook.Application对象的实例多少次,它都会从相同的Outlook.exe进程返回相同的对象。如果在执行此代码之前Outlook未运行,则olApp.ActiveExplorer将为空。
if MyOutLookApp.ActiveExplorer Is Nothing Then
This.Display
Else
set MyOutLookApp.ActiveExplorer.CurrentFolder = This
End If