Click here to Skip to main content
15,883,705 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
I have written this small program in VS2010 to run on Outlook 2007.

It works for a standard read through of the Inbox, but I cannot get it to correctly point to other Folders, I am getting a "COMException was unhandled by user code" error that says "The operation failed. An object could not be found." ...

My Outlook structure has "Outlook (Gary)" at the top & INBOX & Kickabout are both first level Folders with Location Properties of "\\Outlook (Gary)", whereas the Attachments folder is within Kickabout and it has a Location Property of "\\Outlook (Gary)\Kickabout".

So what can't be found ?!?

VB
Imports Microsoft.Office.Interop

Public Class ThisAddIn
    Private Sub ThisAddIn_Startup() Handles Me.Startup
    End Sub
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    End Sub
    Private Sub Application_Startup() Handles Application.Startup

        Dim MyApp As Outlook.Application = New Outlook.Application
        Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI")
        Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
        Dim MyEmails As Integer = MyInbox.Items.Count
        Dim MyEMail As Outlook.MailItem
        Dim MyCount As Integer
        Dim MySubFolder As Outlook.MAPIFolder = MyNS.Folders("Kickabout") <<< Error occurs here

        For MyCount = MyEmails To 1 Step -1
            MyEMail = MyInbox.Items(MyCount)
            If MyEMail.SenderEmailAddress = "MrX@abc.com" Then
                If MyEMail.Attachments.Count > 0 Then
                    MySubFolder = MyNS.Folders("Kickabout\Attachments")
                End If
                MyEMail.Move(MySubFolder)
            End If
        Next
    End Sub

End Class
Posted

1 solution

OK, I have solved this myself ... if anybody is interested in the future, you have to be quite explicit in setting up the path & need a Function to do so, here is the code ...

VB
Imports Microsoft.Office.Interop

Public Class ThisAddIn

    Dim strFolderPath As String

    Private Sub ThisAddIn_Startup() Handles Me.Startup
    End Sub
    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    End Sub
    Private Sub Application_Startup() Handles Application.Startup

        Dim MyApp As Outlook.Application = New Outlook.Application
        Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI")
        Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
        Dim MyEmails As Integer = MyInbox.Items.Count
        Dim MyEMail As Outlook.MailItem
        Dim MyCount As Integer
        Dim MySubFolder As Outlook.Folder = GetMyFolder("Outlook (Gary)\Kickabout")
        Stop
        For MyCount = MyEmails To 1 Step -1
            MyEMail = MyInbox.Items(MyCount)
            If MyEMail.SenderEmailAddress = "MrX@abc.com" Then
                If MyEMail.Attachments.Count > 0 Then
                    MySubFolder = GetMyFolder("Outlook (Gary)\Kickabout\Attachments")
                End If
                MyEMail.Move(MySubFolder)
            End If
        Next
    End Sub

    Function GetMyFolder(FolderPath)
        ' folder path needs to be something like 
        '   "Public Folders\All Public Folders\Company\Sales"
        Dim aFolders
        Dim fldr
        Dim i
        Dim objNS

        On Error Resume Next
        strFolderPath = Replace(FolderPath, "/", "\")
        aFolders = Split(FolderPath, "\")

        'get the Outlook objects
        ' use intrinsic Application object in form script
        objNS = Application.GetNamespace("MAPI")

        'set the root folder
        fldr = objNS.Folders(aFolders(0))

        'loop through the array to get the subfolder
        'loop is skipped when there is only one element in the array
        For i = 1 To UBound(aFolders)
            fldr = fldr.Folders(aFolders(i))
            'check for errors
            'If Err() <> 0 Then Exit Function
        Next
        GetMyFolder = fldr

        ' dereference objects
        objNS = Nothing
    End Function
End Class
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900