I have been trying to work with Outlook and Excel VBA the last couple weeks. I have the 3 versions of code below that allow me to find a specific attachment (cell value) and place it into a shared folder on a server. I would like to first search outlook for a specific subfolder then find the attachment, if it does not exist I want to search the inbox and all subfolders for the attachment. The reason I am trying to do it this way is strictly for how fast the code executes. Some people using this procedure will have a rule for moving emails to a specific folder some people will not. The code runs much faster when it has less emails to look through to find the attachment so looking for the specific folder first will make the people who do this most often happier.
'-----Looks through the inbox-----
'-----Looks Through all Subfolders-----Sub GetAttachmentFromInbox() Dim ns As Namespace Dim Inbox As MAPIFolder Dim Item As Object Dim Atmt As Attachment Dim FileName As String Set ns = GetNamespace("MAPI") Set Inbox = ns.GetDefaultFolder(olFolderInbox) For Each Item In Inbox.Items For Each Atmt In Item.Attachments If Atmt.FileName = Range("CORPONo").Value Then FileName = Range("COFolder").Value & "\" & Atmt.FileName MsgBox FileName Atmt.SaveAsFile FileName Exit Sub End If Next Atmt Next Item End Sub
'-----Look through a specific folder-----Sub GetAttachmentfromAllFolders2() Dim olApp As Outlook.Application Dim olNs As Outlook.Namespace Dim olFolder As Outlook.MAPIFolder Dim eFolder As Outlook.Folder Dim Item As Object Dim Atmt As Outlook.Attachment Dim FileName As String Set olApp = New Outlook.Application Set olNs = olApp.GetNamespace("MAPI") For Each eFolder In olNs.GetDefaultFolder(olFolderInbox).Folders Set olFolder = olNs.GetDefaultFolder(olFolderInbox).Folders(eFolder.Name) For Each Item In eFolder.Items For Each Atmt In Item.Attachments If Atmt.FileName = Range("CORPONo").Value Then FileName = Range("COFolder").Value & "\" & Atmt.FileName MsgBox FileName Atmt.SaveAsFile FileName Exit Sub End If Next Atmt Next Item Set olFolder = Nothing Next eFolder End Sub
Sub GetAttachemntsTest() Dim ns As Namespace Dim Inbox As Outlook.MAPIFolder Dim Item As Object Dim Atmt As Outlook.Attachment Dim FileName As String Set ns = GetNamespace("MAPI") Set Inbox = ns.GetDefaultFolder(olFolderInbox).Folders("LOCUS ENERGY") For Each Item In Inbox.Items For Each Atmt In Item.Attachments If Atmt.FileName = Range("CORPONo").Value Then FileName = Range("COFolder").Value & "\" & Atmt.FileName MsgBox FileName Atmt.SaveAsFile FileName Exit Sub End If Next Atmt Next Item End Sub




Reply With Quote
