Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
停止Excel打开另一个Outlook窗口_Excel_Vba_Outlook - Fatal编程技术网

停止Excel打开另一个Outlook窗口

停止Excel打开另一个Outlook窗口,excel,vba,outlook,Excel,Vba,Outlook,我使用Excel vba宏打开特定的Outlook收件箱子文件夹,但Outlook子文件夹会在新的Outlook窗口中打开 其结果是,如果不手动关闭新窗口,则在多次运行宏后,会打开多个Outlook窗口 我如何修改代码,使Outlook只需在现有的单个窗口中导航到所需的子文件夹 当前,新的Outlook窗口将在我的Excel电子表格顶部打开。运行宏时,我希望Outlook的当前实例转到所需的子文件夹,并显示在Excel电子表格的顶部 我没有写下面的代码。我已经将下面的代码合并到了一个更大的宏中,

我使用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