How to select an mailitem in explorer with "show as conversation"

Status
Not open for further replies.

oliv-

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Hi,
I want to extend a code from Mickael BAUER.

From an Mailitem i want to display an explorer with this Email selected
BUT IF THE FOLDER IS mark "Show as conversation", the code is wrong

how select an Email in cconversation mode ?
how turn off/on conversation mode for just this folder ?

Code:
Public Sub GetItemsFolderPath()
    Dim obj As Object
    Dim F As Outlook.MAPIFolder
    Dim NewExpl As Explorer
    Dim Msg$
    Set obj = Application.ActiveWindow
    If TypeOf obj Is Outlook.Inspector Then
        Set obj = obj.CurrentItem
    Else
        Set obj = obj.Selection(1)
    End If
    Set F = obj.Parent
    Msg = "The path is: " & F.FolderPath & vbCrLf
    Msg = Msg & "Switch to the folder?"
    If MsgBox(Msg, vbYesNo) = vbYes Then
        Set NewExpl = Application.Explorers.add(F, olFolderDisplayFolderOnly)

       
        NewExpl.Activate
        Set acticselection = NewExpl.Selection.item(1)
        On Error GoTo Errohandler
        NewExpl.ClearSelection
        NewExpl.AddToSelection obj
        NewExpl.RemoveFromSelection acticselection


        NewExpl.Display
        NewExpl.WindowState = olMaximized
    End If

    Exit Sub
Errohandler:
    MsgBox Err & vbCr & Err.Description
   
    '        Dim colCB, objCBB
    '        Set colCB = NewExpl.CommandBars
    '
    '        If Not NewExpl Is Nothing Then
    '            If NewExpl.CommandBars.GetPressedMso("ShowInConversations") Then
    '                NewExpl.CommandBars.ExecuteMso ("ShowInConversations")
    '            End If
    '
    '        End If
    '        'NewExpl.CurrentView
    '        NewExpl.ClearSelection
    Resume
End Sub

Sub DemoConversationTable()
    Dim oConv As Outlook.Conversation
    Dim oTable As Outlook.table
    Dim oRow As Outlook.Row
    Dim oMail As Outlook.MailItem
    Dim oItem As Outlook.MailItem
    Const PR_STORE_ENTRYID As String = _
          "http://schemas.microsoft.com/mapi/proptag/0x0FFB0102"

    On Error Resume Next
    ' Obtain the current item for the active inspector.
    Set oMail = Application.ActiveInspector.CurrentItem

    If Not (oMail Is Nothing) Then
        ' Obtain the Conversation object.
        Set oConv = oMail.GetConversation
        If Not (oConv Is Nothing) Then
            Set oTable = oConv.GetTable
            oTable.Columns.add (PR_STORE_ENTRYID)
            Do Until oTable.EndOfTable
                Set oRow = oTable.GetNextRow
                ' Use EntryID and StoreID to open the item.
                Set oItem = Application.Session.GetItemFromID( _
                            oRow("EntryID"), _
                            oRow.BinaryToString(PR_STORE_ENTRYID))
                Debug.Print oItem.subject, _
                            "Attachments.Count=" & oItem.Attachments.Count
            Loop
        End If
    End If
End Sub
 

oliv-

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Hi,
When the folder is set "Show as conversation", there is an error '-2147467259 (80004005)
"la méthode appelée n'est pas valide pour une vue de conversation" (in french) on clearSelection, AddToSelection and Removefromselection
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
MSDN doesn't say anything about an error for the conversation view. According to it, it throws an error only if the item is being edited, no matter which view it is. So, in your error handler handle that error, and prompt the user to first cancel the edit mode, then let him call the function again.

What could throw err 9 is that Selection.Count is 0 directly after displaying the explorer. Adding a DoEvents solves it:
Code:
set newexpl=...
newexpl.display
doevents
...

Here it makes no difference, however, it's not logical that you first want to activate the explorer, then display it. Maybe that's an issue for you as an object that isn't already visible cannot be activated (activating it has to do with setting the focus on it, so it must be visible already).

BTW: "Resume" in your error handler calls the error throwing line again and again. That makes no sense if the user isn't able to solve the error. "Resume Next" would call the next line, which would also make no sense in this context. Both options could make sense, for instance, for user input errors but not for programming errors.
 

oliv-

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Hi Michael,
I agree with you ! But my code is an alpha version, so it lacks instructions in the ErrorHandler, to handle the case folders with the "show in conversation", and other instructions were there, to test other ways.

I wanted to uncheck the "show in conversations" option with msoexecute , then check it after the selection, but there is a dialog box that asks if you want to do it on all folders or just this one, and I have not been able to validate this box with sendkeys "{enter}".

Is there a solution to do otherwise?

Is there a solution to select an item in explorer otherwise ?

Code:
Public Sub GetItemsFolderPath()
    Dim obj As Object
    Dim F As Outlook.MAPIFolder
    Dim NewExpl As Explorer
    Dim Msg$
    Dim ShowInConversations As Boolean
    Set obj = Application.ActiveWindow
    If TypeOf obj Is Outlook.Inspector Then
        Set obj = obj.CurrentItem
    Else
        Set obj = obj.Selection(1)
    End If
    Set F = obj.Parent
    Msg = "The path is: " & F.FolderPath & vbCrLf
    Msg = Msg & "Switch to the folder?"
    If MsgBox(Msg, vbYesNo) = vbYes Then
        Set NewExpl = Application.Explorers.add(F, olFolderDisplayFolderOnly)

        NewExpl.Activate
        DoEvents
        'Set acticselection = NewExpl.Selection.item(1)
        On Error GoTo Errohandler
        NewExpl.ClearSelection
        NewExpl.AddToSelection obj
        'NewExpl.RemoveFromSelection acticselection

        NewExpl.Display
        NewExpl.WindowState = olMaximized
    End If

    If ShowInConversations Then
        MsgBox "please press [enter] on next dialog box"
        NewExpl.CommandBars.ExecuteMso ("ShowInConversations")
    End If
    Exit Sub
Errohandler:

    Debug.Print Err.Number
    If Err.Number = -2147467259 Then
        'MsgBox Err & vbCr & Err.Description

        '################################################
        'HERE CODE FOR FOLDERS "SHOW IN CONVERSATIONS"

        Dim colCB, objCBB
        Set colCB = NewExpl.CommandBars

        If Not NewExpl Is Nothing Then
            If NewExpl.CommandBars.GetPressedMso("ShowInConversations") Then
                ShowInConversations = True
                MsgBox "please press [enter] on next dialog box"
                NewExpl.CommandBars.ExecuteMso ("ShowInConversations")
                'SendKeys "{enter}"
            End If

        End If
        Stop
        Resume
        '################################################
    Else
        MsgBox Err & vbCr & Err.Description
        NewExpl.Display
        NewExpl.WindowState = olMaximized
        Exit Sub
    End If
End Sub
 

Michael Bauer

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
Maybe you can change it via CurrentView object, maybe directly via its xml property. I don't know. However, acccording to MSDN and my own tests with Outlook 2010, the conversation view isn't the problem. Where did you read it is causing the error?
 

oliv-

Senior Member
Outlook version
Outlook 2010 32 bit
Email Account
Exchange Server
I read it on the Error dialog box !

here is my new operational version

Code:
Public Sub GetItemFolderPathAndSwitch()
'---------------------------------------------------------------------------------------
' Procedure : GetItemFolderPathAndSwitch
' Author    : Michael BAUER, improved by OLiv
' Date      : 23/06/2015
' Purpose   :
'---------------------------------------------------------------------------------------
'
    Dim obj As Object
    Dim F As Outlook.MAPIFolder
    Dim NewExpl As Explorer
    Dim Msg$
    Dim ShowInConversations As Boolean
    Set obj = Application.ActiveWindow
    If TypeOf obj Is Outlook.Inspector Then
        Set obj = obj.CurrentItem
    Else
        Set obj = obj.Selection(1)
    End If
    Set F = obj.Parent
    Msg = "The path is: " & F.FolderPath & vbCrLf
    Msg = Msg & "Switch to the folder?"
    If MsgBox(Msg, vbYesNo) = vbYes Then
        Set NewExpl = Application.Explorers.add(F, olFolderDisplayFolderOnly)
        On Error GoTo ErrorHandler
        NewExpl.AddToSelection obj
        NewExpl.ShowPane olPreview, False
        NewExpl.ShowPane olToDoBar, False
        NewExpl.Display
        NewExpl.WindowState = olMaximized
    End If

    Exit Sub
ErrorHandler:

    Debug.Print Err.Number
    If Err.Number = -2147467259 Then
        'MsgBox Err & vbCr & Err.Description

        '################################################
        'HERE CODE FOR FOLDERS "SHOW IN CONVERSATIONS"

        Dim objView As View, objViewTemp As View

        If NewExpl.CommandBars.GetPressedMso("ShowInConversations") Then
            ShowInConversations = True

            Set objView = NewExpl.CurrentFolder.CurrentView
            objView_Mem = objView.Name
            On Error Resume Next
            Set objViewTemp = objView.Parent("tmpNoConversation")
            If objViewTemp Is Nothing Then
                Set objViewTemp = objView.Copy("tmpNoConversation", olViewSaveOptionThisFolderOnlyMe)
                objViewTemp.XML = Replace(objView.XML, "<upgradetoconv>1</upgradetoconv>", "", 1, , vbTextCompare)
               
                objViewTemp.Save
            End If
            On Error GoTo 0
            objViewTemp.Reset
            objViewTemp.Apply
            DoEvents
        End If

        NewExpl.Activate
        DoEvents
        NewExpl.ClearSelection
        NewExpl.AddToSelection obj
        NewExpl.Display
        NewExpl.WindowState = olMaximized

        If ShowInConversations Then
         Set objView = NewExpl.CurrentFolder.Views(objView_Mem)
            objView.Reset
            objView.Apply
            objViewTemp.Delete
        End If

        '################################################
    Else
        MsgBox Err & vbCr & Err.Description
        NewExpl.Display
        NewExpl.WindowState = olMaximized
        Exit Sub
    End If
End Sub
 
Status
Not open for further replies.
Similar threads
Thread starter Title Forum Replies Date
A Select the position of an attached file in a HTML mailitem Outlook VBA and Custom Forms 1
C must select message to trigger safe list Using Outlook 3
O VBA Cases with Listbox - Can you use Multi-Select? Outlook VBA and Custom Forms 4
E Asking user to select multiple options in a list in an email Outlook VBA and Custom Forms 0
R List folders in a combo box + select folder + move emails from inbox to that folder + reply to that email Outlook VBA and Custom Forms 1
R Add 'Company' to Select Names Form Using Outlook 1
B Select / activate first email item in the searched query Using Outlook 1
A Multi-select Listbox Outlook VBA and Custom Forms 6
H Select Specific Account When Sending Email, Based on Current Folder Outlook VBA and Custom Forms 1
S Display PF contact folder items to select contact to link to appointment Outlook VBA and Custom Forms 1
N Auto-complete - block select emails Using Outlook 3
N Select Appointment subject line from combobox or list Outlook VBA and Custom Forms 1
G How to Copy Multi Select Listbox Data to Appointment Outlook VBA and Custom Forms 3
N Select a folder in a user account Outlook VBA and Custom Forms 2
Diane Poremsky Select from a List of Subjects before Sending a Message Using Outlook 0
Diane Poremsky Select Multiple Calendars in Outlook Using Outlook 0
P Select image in contact notes field and save as jpg Outlook VBA and Custom Forms 6
N Select Existing BCM Business Contact in C# application Using Outlook 0
nathandavies Creating a Select Case for a directory of folders Outlook VBA and Custom Forms 1
B What is the best way to use Outlook address book to select customer and then open Excel Outlook VBA and Custom Forms 22
C Outlook 2007 Select Names Default columns Using Outlook 3
R Can BCM monitor and select specific emails and use content info to update the client's record? BCM (Business Contact Manager) 1
R Cannot select iCloud calendar Using Outlook 5
H Select one of Contact-Mailadesses to Export > Excel or Winword Outlook VBA and Custom Forms 2
G Select Outlook account for BCM? BCM (Business Contact Manager) 2
Z Manual archive of select folders Using Outlook 1
R How to modify Outlook Select Rooms form columns Using Outlook 1
Z bulk add categories / with fixed colours / select multiple categories on a not Using Outlook 1
C Outlook editing won't select just one word Using Outlook 1
I Address book contacts not listed in "Select Names:Contacts" window Using Outlook 2
Y Outlook 2010 Select and reply to multiple messages at one time Using Outlook 0
Y Outlook 2010 Select and reply to multiple messages at one time Using Outlook 2
D Contacts as default in Select Names dialog Using Outlook 1
S Outlook 2007 caendar hangs when I select today's day BCM (Business Contact Manager) 4
J Select Names Dialog Box Outlook VBA and Custom Forms 16
S Outlook Email Help: Select custom voting button options VBA Outlook VBA and Custom Forms 1
W Outlook Coding - Select different email adresses to send from Outlook VBA and Custom Forms 5
H Select/Unselect items in ActiveExplorer by code? Outlook VBA and Custom Forms 2
M How to programmatically select a outlook search folder? Outlook VBA and Custom Forms 1
M Select Alternate profile Outlook VBA and Custom Forms 1
S Event for email message select Outlook VBA and Custom Forms 1
L RE: Select Users in Shared Database BCM (Business Contact Manager) 1
R select folder as addressbook Outlook VBA and Custom Forms 1
S Select a folder in Outlook (in code) Outlook VBA and Custom Forms 2
G Event when creating task from mailitem Outlook VBA and Custom Forms 2
A Run-time error '430' on certain emails when trying to set "Outlook.mailitem" as "ActiveExplorer.Selection.Item" Outlook VBA and Custom Forms 2
U Outbox Message Stuck after reading some MailItem Properties with VBA Outlook VBA and Custom Forms 1
oliv- Best practice for catching mailitem.events Outlook VBA and Custom Forms 0
JorgeDario How to capture and save the text, when responding a MailItem? Outlook VBA and Custom Forms 3
JorgeDario how to check a MailItem has a digital signature (SMIME) with vba? Outlook VBA and Custom Forms 1

Similar threads

Top