Consulting

Results 1 to 5 of 5

Thread: Auto Create and Sort to Folders???

  1. #1

    Auto Create and Sort to Folders???

    Hello,

    I have a rather large mailbox (3-4gb in OL 2003 SP2) which has a ton of email I need and a ton I dont. It goes back 8 years. Id like to create a macro that will:

    1) Look at an email address in my inbox and make a folder (if it dosent exist) with the email address as the name of the folder.

    2) Sort the email to that folder

    3) Move to the next email, repeat

    Right now its spent 8 years being sorted by project (rather than email address)

    This way I can just delete the whole folder for those I dont need!

    Has this been done? Anybody have a clue how to start? Im not VBA literate but im a quick study.

    thanks!

    ME
    Last edited by Marc Easy; 05-07-2008 at 08:18 PM.

  2. #2
    Knowledge Base Approver VBAX Master Oorang's Avatar
    Joined
    Jan 2007
    Posts
    1,135
    Location
    Welcome to the board
    This should so about what you described.

    [vba]Option Explicit

    Public Sub SortToEmailFolders(Optional ByVal copyOnly As Boolean = False)
    '---------------------------------------------------------------------------
    ' Procedure : SortToEmailFolders
    ' Author : Aaron Bush
    ' Date : 05/08/2008
    ' Purpose : Sorts all email in inbox into a folder named by the sender.
    ' Input(s) : copyOnly - If true, rather than moving email to folders, a
    ' copy of the email will be sent to the folder while
    ' leaving the original in the inbox.
    '---------------------------------------------------------------------------
    Const strMailItem_c As String = "MailItem"
    Dim ns As Outlook.NameSpace
    Dim mfMain As Outlook.MAPIFolder
    Dim mfInbox As Outlook.MAPIFolder
    Dim mfDstn As Outlook.MAPIFolder
    Dim miCurnt As Outlook.MailItem
    Dim objItem As Object
    On Error GoTo Err_Hnd
    Set ns = Outlook.Session
    Set mfInbox = ns.GetDefaultFolder(olFolderInbox)
    Set mfMain = mfInbox.parent
    For Each objItem In mfInbox.Items
    If TypeName(objItem) = strMailItem_c Then
    Set miCurnt = objItem
    If Not FolderExists(mfMain, miCurnt.SenderName) Then
    Set mfDstn = mfMain.Folders.Add(miCurnt.SenderName)
    Else
    Set mfDstn = mfMain.Folders(miCurnt.SenderName)
    End If
    If copyOnly Then
    miCurnt.Copy.Move mfDstn
    Else
    miCurnt.Move mfDstn
    End If
    End If
    Next
    Exit_Proc:
    On Error Resume Next
    Set objItem = Nothing
    Set miCurnt = Nothing
    Set mfInbox = Nothing
    Set mfMain = Nothing
    Set ns = Nothing
    Exit Sub
    Err_Hnd:
    MsgBox Err.Description, vbSystemModal, "Error: " & Err.Number
    Resume Exit_Proc
    End Sub

    Private Function FolderExists(ByRef parent As Outlook.MAPIFolder, _
    ByVal name As String _
    ) As Boolean
    On Error Resume Next
    Dim mfTest As Outlook.MAPIFolder
    Set mfTest = parent.Folders(name)
    FolderExists = Not CBool(Err.Number)
    End Function
    [/vba]
    Cordially,
    Aaron



    Keep Our Board Clean!
    • Please Mark your thread "Solved" if you get an acceptable response (under thread tools).
    • Enclose your code in VBA tags then it will be formatted as per the VBIDE to improve readability.

  3. #3
    wow thanks, ill test it out t'nite!

  4. #4
    I have to do something similar to this.
    I need to do the auto create and sort to folders what I'm searching by is in the subject. However its not the entire subject just part of it.
    What I need is between '(' ')' that needs to be the folder name. I can kinda see how to do this I just found this example and else where I found an example using regex in VBA which I'm trying to modify to do the job.
    [vba]Sub RegExpTest()
    Dim re As RegExp
    Dim strToSearch As String
    Dim strPattern As String
    Dim strResults As String
    Dim oMatches As MatchCollection
    Dim oMatch As Match

    strToSearch = Selection.Text


    Set re = New RegExp
    re.Global = True
    re.IgnoreCase = True

    Do While (1)
    strPattern = InputBox("Enter search pattern string:", "RegExp Search", "")
    If Len(strPattern) = 0 Then Exit Do
    re.Pattern = strPattern
    Set oMatches = re.Execute(strToSearch)
    If oMatches.Count <> 0 Then
    strResults = Chr(34) & strPattern & Chr(34) & _
    " matched " & oMatches.Count & " times:" _
    & vbCr & vbCr
    For Each oMatch In oMatches
    strResults = strResults & _
    oMatch.Value & _
    ": at position " & _
    oMatch.FirstIndex & vbCr
    Next oMatch
    Else
    strResults = Chr(34) & strPattern & Chr(34) & _
    " didn't match anything. Try again."
    End If
    MsgBox strResults
    Loop
    End Sub

    [/vba]
    I think I got that from O'Reily

    I'll post what I came up with soon

  5. #5
    Ok this is what I have ... it doesn't look that great I haven't done basic in years. One of the problems I'm having is it doesn't like my regex
    "\((*)\)" that should say find '(' any number of characters then find ')' and it should set the pattern as the value of whats in between them.
    [vba]Option Explicit
    Public Sub Sorter()
    'heavy copy, pasting by Mike Brown using code from vbaexpress . com/forum/showpost.php?p=142833&postcount=2
    'Aaron Bush
    '5-8-08 'Sean M. Burke, Andy Bruno, and Andrew Savikas from windowsdevcenter . com/pub/a/windows/excerpt/wdhks_1/index.html?page=4

    Const strMailItem_c As String = "MailItem"
    Dim ns As Outlook.NameSpace
    Dim mfMain As Outlook.MAPIFolder
    Dim mfInbox As Outlook.MAPIFolder
    Dim mfDstn As Outlook.MAPIFolder
    Dim miCurnt As Outlook.MailItem
    Dim objItem As Object

    Dim re As RegExp
    Dim strToSearch As String
    Dim strPattern As String
    Dim strResults As String
    Dim oMatches As MatchCollection
    Dim oMatch As match

    Dim found As match


    Dim Pattern As String
    Pattern = "a"
    re.Pattern = Pattern 'look for this pattern
    re.IgnoreCase = True 'don't care about case
    re.Global = True

    On Error GoTo Err_Hnd
    Set ns = Outlook.Session
    Set mfInbox = ns.GetDefaultFolder(olFolderInbox)
    Set mfMain = mfInbox.parent

    For Each objItem In mfInbox.Items
    'regex stuff here
    strToSearch = miCurnt.Forward
    Set found = re.Execute(strToSearch) 'runs the regex on the forward address field

    'end of regex stuff
    If TypeName(objItem) = strMailItem_c Then
    Set miCurnt = objItem
    If Not FolderExists(mfMain, found) Then
    Set mfDstn = mfMain.Folders.Add(found)
    Else
    Set mfDstn = mfMain.Folders(found)
    End If
    miCurnt.Copy.Move mfDstn
    End If
    Next
    Exit_Proc:
    On Error Resume Next
    Set objItem = Nothing
    Set miCurnt = Nothing
    Set mfInbox = Nothing
    Set mfMain = Nothing
    Set ns = Nothing
    Exit Sub
    Err_Hnd:
    MsgBox Err.Description, vbSystemModal, "Error: " & Err.Number
    Resume Exit_Proc
    End Sub

    Private Function FolderExists(ByRef parent As Outlook.MAPIFolder, ByVal name As String) As Boolean
    On Error Resume Next
    Dim mfTest As Outlook.MAPIFolder
    Set mfTest = parent.Folders(name)
    FolderExists = Not CBool(Err.Number)
    End Function
    [/vba]

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •