首页 文章

停止Excel打开另一个Outlook窗口

提问于
浏览
0

我有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

3 回答

  • 0

    从我对another question的回答:(实际上是一些)

    使用Excel等应用程序时,确保应用程序对象正确无误是很重要的 . 当完成它们时,请关闭 . (以及将所有对象设置为Nothing),否则可能会无意中运行多个实例,这可能导致内存泄漏,从而导致崩溃和潜在的数据丢失 . 要检查是否存在Outlook的现有实例,请使用此函数:Function IsOutlookOpen()
    如果Outlook正在运行,则返回TRUE

    Dim olApp作为Outlook.Application

    On Error Resume Next
    设置olApp = GetObject(,“Outlook.Application”)
    On Error GoTo 0

    如果olApp什么都没有
    IsOutlookOpen = False
    其他
    IsOutlookOpen = True
    万一

    结束功能

    有关从源中打开 new vs. existing instances Office应用程序的更多信息: Ron de Bruin

  • 0

    如果您只想导航到其现有单个窗口中的子文件夹,则使用Application.ActiveExplorer Method (Outlook)CurrentFolder Property一起使用

    以下示例在同一窗口应用程序中激活 SubFolder "Temp" 下的 "Temp"

    Option Explicit
    Public Sub Example()
        Dim olApp As Outlook.Application
        Dim olNS As Outlook.Namespace
        Dim Inbox As Outlook.MAPIFolder
        Dim SubFolder As Outlook.MAPIFolder
    
        '// Ref to Outlook Inbox
        Set olApp = New Outlook.Application
        Set olNS = olApp.GetNamespace("MAPI")
        Set Inbox = olNS.GetDefaultFolder(olFolderInbox)
        Set SubFolder = Inbox.Folders("Temp")
    
        If Not SubFolder Is Nothing Then
            Set olApp.ActiveExplorer.CurrentFolder = SubFolder
        Else
            MsgBox "SubFolder Not Found", vbInformation
        End If
    End Sub
    

    MSDN:早期和晚期绑定

  • 1

    您的代码始终调用 MAPIFolder.Display ,因此您每次都会获得一个新的资源管理器窗口 . 请执行以下操作

    if MyOutLookApp.ActiveExplorer Is Nothing Then
      This.Display
    Else
      set MyOutLookApp.ActiveExplorer.CurrentFolder = This
    End If
    

相关问题