Exporting Outlook Task Counts to Excel


Richard Paine commented on my Exporting Outlook Message Counts to Excel post asking if it would be possible to gather some statistics about tasks in Outlook. What Richard would like is a macro that counts the number of active tasks, the number of tasks created that day (i.e. the day the macro is run on), and the number of tasks completed that day. Richard clarified that he would like the macro to write the data to an existing sheet in an existing Excel workbook.

To accomplish this the macro needs to loop through all the items in a tasks folder (I’m assuming Richard’s tasks are in the default folder, but can modify the code to accommodate any task folder) checking each one to see if it is active, was created on the same day the macro is being run, was completed on the same day the macro is being run. Having collected the counts, the macro then checks to see if the spreadsheet exists, creates it if it doesn’t, opens it if it does, and writes the counts to it. Finally, the code saves the workbook, cleans up the objects to avoid memory leaks, and displays a dialog-box to let Richard know that it’s finished. All very straightforward.

Once this code is added to Outlook Richard will be able to export the task counts any time he wants by running the macro. That requires conscious action on Richard’s part. Another approach would be for Richard to convert this code to VBScript and schedule it to run at set intervals via Windows’ built-in task scheduler. Or, with a few modifications, he could add the code to the Excel spreadsheet and either run it manually or set it to run automatically each time he opens the workbook.

Requirements. This solution should work in any version of Outlook.

Instructions.

  1. Start Outlook.
  2. Press ALT+F11 to open the Visual Basic Editor.
  3. If not already expanded, expand Microsoft Office Outlook Objects.
  4. If not already expanded, expand Modules.
  5. Select an existing module (e.g. Module1) by double-clicking on it or create a new module by right-clicking Modules and selecting Insert > Module.
  6. Copy the code from the code snippet box and paste it into the right-hand pane of Outlook’s VB Editor window.
  7. Click the diskette icon on the toolbar to save the changes.
  8. Close the VB Editor.
Sub ExportTaskActivityToExcel()
    'Define some constants
    'Edit the path and filename on the next line
    Const FILEPATH = "c:\Users\David\Documents\TaskCounts.xlsx"
    
    'Define some variables
    Dim excApp As Object, excWkb As Object, excWks As Object, objFSO As Object
    Dim olkFld As Outlook.Items, olkTsk As Outlook.TaskItem
    Dim intCreated As Integer, intCompleted As Integer, intActive As Integer, lngRow As Long

    'Count the tasks
    Set olkFld = Session.GetDefaultFolder(olFolderTasks).Items
    For Each olkTsk In olkFld
        If olkTsk.DateCompleted = Date Then intCompleted = intCompleted + 1
        If CDate(Format(olkTsk.CreationTime, "m/d/yyyy")) = Date Then intCreated = intCreated + 1
        If olkTsk.Complete = False Then intActive = intActive + 1
    Next
    
    'Write the counts to the spreadsheet
    Set excApp = CreateObject("Excel.Application")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(FILEPATH) Then
        Set excWkb = excApp.Workbooks.Open(FILEPATH)
        Set excWks = excWkb.Worksheets(1)
    Else
        Set excWkb = excApp.Workbooks.Add()
        Set excWks = excWkb.Worksheets(1)
        With excWks
            .Cells(1, 1) = "Date"
            .Cells(1, 2) = "Active"
            .Cells(1, 3) = "Created"
            .Cells(1, 4) = "Completed"
        End With
    End If
    lngRow = excWks.UsedRange.Rows.Count + 1
    excWks.Cells(lngRow, 1) = Date
    excWks.Cells(lngRow, 2) = intActive
    excWks.Cells(lngRow, 3) = intCreated
    excWks.Cells(lngRow, 4) = intCompleted
    
    'Clean-up
    excApp.DisplayAlerts = False
    excWkb.Close True, FILEPATH
    Set excWks = Nothing
    Set excWkb = Nothing
    excApp.Quit
    Set excApp = Nothing
    Set objFSO = Nothing
    Set olkTsk = Nothing
    Set olkapp = Nothing
    MsgBox "Done", vbInformation + vbOKOnly, "Export Task Activity to Excel"
End Sub

Revisions.

  • Revision 1

This revision is for Richard who asked if I could modify the code to prompt for a date instead of using today’s date only. The solution I’ve employed is to use an InputBox to prompt for a date and use whatever date is entered. The InputBox will be pre-filled with today’s date thereby saving on the need to enter anything if Richard wants to use today’s date.

Use the instructions from the original code to install this code. If you’ve already added the original code, then replace it with this version.

Sub ExportTaskActivityToExcel()
    'Define some constants
    'Edit the path and filename on the next line
    Const FILEPATH = "c:\Users\David\Documents\TaskCounts.xlsx"
    
    'Define some variables
    Dim excApp As Object, excWkb As Object, excWks As Object, objFSO As Object
    Dim olkFld As Outlook.Items, olkTsk As Outlook.TaskItem
    Dim intCreated As Integer, intCompleted As Integer, intActive As Integer, lngRow As Long, datTarget As Date

    'Get the date
    datTarget = InputBox("Enter the date you want to export for in the form mm/dd/yyyy.", "Enter Target Date", Date)

    'Count the tasks
    Set olkFld = Session.GetDefaultFolder(olFolderTasks).Items
    For Each olkTsk In olkFld
        If olkTsk.DateCompleted = datTarget Then intCompleted = intCompleted + 1
        If CDate(Format(olkTsk.CreationTime, "m/d/yyyy")) = datTarget Then intCreated = intCreated + 1
        If olkTsk.Complete = False Then intActive = intActive + 1
    Next
    
    'Write the counts to the spreadsheet
    Set excApp = CreateObject("Excel.Application")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(FILEPATH) Then
        Set excWkb = excApp.Workbooks.Open(FILEPATH)
        Set excWks = excWkb.Worksheets(1)
    Else
        Set excWkb = excApp.Workbooks.Add()
        Set excWks = excWkb.Worksheets(1)
        With excWks
            .Cells(1, 1) = "Date"
            .Cells(1, 2) = "Active"
            .Cells(1, 3) = "Created"
            .Cells(1, 4) = "Completed"
        End With
    End If
    lngRow = excWks.UsedRange.Rows.Count + 1
    excWks.Cells(lngRow, 1) = datTarget
    excWks.Cells(lngRow, 2) = intActive
    excWks.Cells(lngRow, 3) = intCreated
    excWks.Cells(lngRow, 4) = intCompleted
    
    'Clean-up
    excApp.DisplayAlerts = False
    excWkb.Close True, FILEPATH
    Set excWks = Nothing
    Set excWkb = Nothing
    excApp.Quit
    Set excApp = Nothing
    Set objFSO = Nothing
    Set olkTsk = Nothing
    Set olkApp = Nothing
    MsgBox "Done", vbInformation + vbOKOnly, "Export Task Activity to Excel"
End Sub

Revisions.

  • Revision 2

I put this revision together for Jon who asked for two changes. First, he needs the solution to work against a task folder other than the default task folder. Second, Jon has nested sub-folders and needs the solution to process them all instead of processing just the starting folder. Use the instructions from the original post to add the code to Outlook.

'Define some constants
'Edit the path and filename on the next line
Const FILEPATH = "c:\Users\David\Documents\TaskCounts.xlsx"

Private intCreated As Integer, _
        intCompleted As Integer, _
        intActive As Integer

Sub ExxportTaskActivityToExcelController()
    'Define some variables
    Dim excApp As Object, _
        excWkb As Object, _
        excWks As Object
        
    'Connect to Excel
    Set excApp = CreateObject("Excel.Application")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    If objFSO.FileExists(FILEPATH) Then
        Set excWkb = excApp.Workbooks.Open(FILEPATH)
        Set excWks = excWkb.Worksheets(1)
    Else
        Set excWkb = excApp.Workbooks.Add()
        Set excWks = excWkb.Worksheets(1)
        With excWks
            .Cells(1, 1) = "Date"
            .Cells(1, 2) = "Active"
            .Cells(1, 3) = "Created"
            .Cells(1, 4) = "Completed"
        End With
    End If
    
    'Process the root folder and all sub-folders under it
    'On the next line edit the path to the starting Outlook folder.
    ExportTaskActivityToExcel OpenOutlookFolder("Projects\Tasks")
    
    'Write the counts to the spreadsheet
    lngRow = excWks.UsedRange.Rows.Count + 1
    excWks.Cells(lngRow, 1) = Date
    excWks.Cells(lngRow, 2) = intActive
    excWks.Cells(lngRow, 3) = intCreated
    excWks.Cells(lngRow, 4) = intCompleted
    
    'Clean-up
    excApp.DisplayAlerts = False
    excWkb.Close True, FILEPATH
    Set excWks = Nothing
    Set excWkb = Nothing
    excApp.Quit
    Set excApp = Nothing
    Set objFSO = Nothing
    Set olkTsk = Nothing
    Set olkApp = Nothing
    MsgBox "Done", vbInformation + vbOKOnly, "Export Task Activity to Excel"
End Sub

Sub ExportTaskActivityToExcel(olkFld As Outlook.Folder)
    'Define some variables
    Dim olkTsk As Outlook.TaskItem, _
        olkSub As Outlook.Folder, _
        lngRow As Long
        
    'Count the tasks
    For Each olkTsk In olkFld.Items
        If olkTsk.DateCompleted = Date Then intCompleted = intCompleted + 1
        If CDate(Format(olkTsk.CreationTime, "m/d/yyyy")) = Date Then intCreated = intCreated + 1
        If olkTsk.Complete = False Then intActive = intActive + 1
    Next
    
    'Process subfolders of the current folder
    For Each olkSub In olkFld.Folders
        ExportTaskActivityToExcel olkSub
    Next
    
    'Clean-up
    Set olkTsk = Nothing
    Set olkFld = Nothing
End Sub

Public Function OpenOutlookFolder(strFolderPath As String) As Outlook.MAPIFolder
    ' Purpose: Opens an Outlook folder from a folder path.
    ' Written: 4/24/2009
    ' Author:  David Lee
    ' Outlook: All versions
    Dim arrFolders As Variant, _
        varFolder As Variant, _
        bolBeyondRoot As Boolean
    On Error Resume Next
    If strFolderPath = "" Then
        Set OpenOutlookFolder = Nothing
    Else
        Do While Left(strFolderPath, 1) = "\"
            strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
        Loop
        arrFolders = Split(strFolderPath, "\")
        For Each varFolder In arrFolders
            Select Case bolBeyondRoot
                Case False
                    Set OpenOutlookFolder = Outlook.Session.Folders(varFolder)
                    bolBeyondRoot = True
                Case True
                    Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
            End Select
            If Err.Number <> 0 Then
                Set OpenOutlookFolder = Nothing
                Exit For
            End If
        Next
    End If
    On Error GoTo 0
End Function
Advertisements

27 comments on “Exporting Outlook Task Counts to Excel

  1. Hello again… I have adapted the code to my code, to change Default Task Folder, but I am continuosly facing an ‘Object Variable or With block variable not set’ error, in line 21, and I can’t figure out why. Here’s the code with the included OpenOutlookFolder() function

    Sub GetTasks()
     Dim strReport As String
      Dim olnameSpace As Outlook.NameSpace
      Dim taskFolder As Outlook.MAPIFolder
      Dim tasks As Outlook.Items
      Dim tsk As Outlook.TaskItem
      Dim objExcel As New Excel.Application
      Dim exWb As Excel.Workbook
      Dim sht As Excel.Worksheet
      Dim olFld As Outlook.Items
      Dim strMyName As String
      Dim x As Integer
      Dim y As Integer
     
      Set exWb = objExcel.Workbooks.Open("c:\temp\MyActiveTasks.xlsx")
     
      'exWb.Sheets(strMyName).Delete
      'exWb.Sheets.Add (strMyName)
      
      'Set olnameSpace = Application.GetNamespace("MAPI")
      Set tasks = OpenOutlookFolder("Personal Folders\Best Buy").Items
      strReport = ""
        
      'Create Header
      exWb.Sheets("Sheet1").Cells(1, 1) = "Subject"
      exWb.Sheets("Sheet1").Cells(1, 2) = "Due Date"
      exWb.Sheets("Sheet1").Cells(1, 3) = "Percent Complete"
      exWb.Sheets("Sheet1").Cells(1, 4) = "Status"
      
      y = 2
     
      For x = 1 To tasks.Count
     
           Set tsk = tasks.Item(x)
     
           'strReport = strReport + tsk.Subject + "; "
    
           'Fill in Data
           If Not tsk.Complete Then
     
            exWb.Sheets("Sheet1").Cells(y, 1) = tsk.Subject
            exWb.Sheets("Sheet1").Cells(y, 2) = tsk.DueDate
            exWb.Sheets("Sheet1").Cells(y, 3) = tsk.PercentComplete
            exWb.Sheets("Sheet1").Cells(y, 4) = tsk.Status
            y = y + 1
     
           End If
     
      Next x
      
      'Autofit all column widths
    
    For Each sht In ActiveWorkbook.Worksheets
        sht.Columns("A").EntireColumn.AutoFit
        sht.Columns("B").EntireColumn.AutoFit
        sht.Columns("C").EntireColumn.AutoFit
        sht.Columns("D").EntireColumn.AutoFit
    Next sht
     
    exWb.Save
    exWb.Close
     
    Set exWb = Nothing
    
    End Sub
    
    Public Function OpenOutlookFolder(strFolderPath As String) As Outlook.MAPIFolder
        ' Purpose: Opens an Outlook folder from a folder path.
        ' Written: 4/24/2009
        ' Author:  David Lee
        ' Outlook: All versions
        Dim arrFolders As Variant, _
            varFolder As Variant, _
            bolBeyondRoot As Boolean
        On Error Resume Next
        If strFolderPath = "" Then
            Set OpenOutlookFolder = Nothing
        Else
            Do While Left(strFolderPath, 1) = "\"
                strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
            Loop
            arrFolders = Split(strFolderPath, "\")
            For Each varFolder In arrFolders
                Select Case bolBeyondRoot
                    Case False
                        Set OpenOutlookFolder = Outlook.Session.Folders(varFolder)
                        bolBeyondRoot = True
                    Case True
                        Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
                End Select
                If Err.Number  0 Then
                    Set OpenOutlookFolder = Nothing
                    Exit For
                End If
            Next
        End If
        On Error GoTo 0
    End Function
    
    • That was right David! Thanks, now I have faced another issue 😦 … when I iterate variable tsk into tsk = tasks.Item(x) (considering variable tasks type is Outlook.Items ) I get a type mismatch error …. why is it happening even though I am instantiating an Outlook.Items type into a Outlook.taskItem type?

      Here is the corrected code:

      Sub GetTasks()
       Dim strReport As String
        Dim olnameSpace As Outlook.NameSpace
        Dim taskFolder As Outlook.MAPIFolder
        Dim tasks As Outlook.Items
        Dim tsk As Outlook.TaskItem
        Dim objExcel As New Excel.Application
        Dim exWb As Excel.Workbook
        Dim sht As Excel.Worksheet
        Dim olFld As Outlook.Items
        Dim strMyName As String
        Dim x As Integer
        Dim y As Integer
       
        Set exWb = objExcel.Workbooks.Open("c:\temp\MyActiveTasks.xlsx")
       
        'exWb.Sheets(strMyName).Delete
        'exWb.Sheets.Add (strMyName)
        
        'Set olnameSpace = Application.GetNamespace("MAPI")
        Set tasks = OpenOutlookFolder("Personal Folders\Inbox").Items
        strReport = ""
          
        'Create Header
        exWb.Sheets("Sheet1").Cells(1, 1) = "Subject"
        exWb.Sheets("Sheet1").Cells(1, 2) = "Due Date"
        exWb.Sheets("Sheet1").Cells(1, 3) = "Percent Complete"
        exWb.Sheets("Sheet1").Cells(1, 4) = "Status"
        
        y = 2
       
        For x = 1 To tasks.Count
       
             Set tsk = tasks.Item(x)
       
             'strReport = strReport + tsk.Subject + "; "
      
             'Fill in Data
             If Not tsk.Complete Then
       
              exWb.Sheets("Sheet1").Cells(y, 1) = tsk.Subject
              exWb.Sheets("Sheet1").Cells(y, 2) = tsk.DueDate
              exWb.Sheets("Sheet1").Cells(y, 3) = tsk.PercentComplete
              exWb.Sheets("Sheet1").Cells(y, 4) = tsk.Status
              y = y + 1
       
             End If
       
        Next x
        
        'Autofit all column widths
      
      For Each sht In ActiveWorkbook.Worksheets
          sht.Columns("A").EntireColumn.AutoFit
          sht.Columns("B").EntireColumn.AutoFit
          sht.Columns("C").EntireColumn.AutoFit
          sht.Columns("D").EntireColumn.AutoFit
      Next sht
       
      exWb.Save
      exWb.Close
       
      Set exWb = Nothing
      
      End Sub
      
      Public Function OpenOutlookFolder(strFolderPath As String) As Outlook.MAPIFolder
          ' Purpose: Opens an Outlook folder from a folder path.
          ' Written: 4/24/2009
          ' Author:  David Lee
          ' Outlook: All versions
          Dim arrFolders As Variant, _
              varFolder As Variant, _
              bolBeyondRoot As Boolean
          On Error Resume Next
          If strFolderPath = "" Then
              Set OpenOutlookFolder = Nothing
          Else
              Do While Left(strFolderPath, 1) = "\"
                  strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
              Loop
              arrFolders = Split(strFolderPath, "\")
              For Each varFolder In arrFolders
                  Select Case bolBeyondRoot
                      Case False
                          Set OpenOutlookFolder = Outlook.Session.Folders(varFolder)
                          bolBeyondRoot = True
                      Case True
                          Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
                  End Select
                  If Err.Number  0 Then
                      Set OpenOutlookFolder = Nothing
                      Exit For
                  End If
              Next
          End If
          On Error GoTo 0
      End Function
      
    • Angel,

      You’ve defined tsk as a TaskItem and tasks as Items. The problem is that you’ve set tasks to be the items in the Inbox folder. There won’t be any tasks in the Inbox. You need to set tasks to be the contents of the Tasks folder.

  2. Hello and thanks for the reply! I have found this Macro pretty useful for a job that is common in my daily basis but I have a big doubt: how would you represent in a macro the “Start Date” if the Flag date has been set to “No Date” ?

    Thanks a lot in advance for the reply!
    Best regards

    • Hi, Angel.

      I’m assuming that we’re talking about a task item. If so, then when no start date is set the start date defaults to 1/1/4501.

  3. Hi – I love this code and would like to use it on a PST with multiple task folders. I struggle with how to point to a PST instead of the default MAPI folder. (Long story short with a Windowsphone you can’t have subfolders in the tasks folder… so I have to have a separate PST for tasks). Can you give me any pointers with this?
    Thanks in advance,
    Jon

    • Hi, Jon.

      Glad you like the code.

      Here’s how to point to a task folder other than the default task folder. First, add this code to the code in the post.

      Public Function OpenOutlookFolder(strFolderPath As String) As Outlook.MAPIFolder
          ' Purpose: Opens an Outlook folder from a folder path.
          ' Written: 4/24/2009
          ' Author:  David Lee
          ' Outlook: All versions
          Dim arrFolders As Variant, _
              varFolder As Variant, _
              bolBeyondRoot As Boolean
          On Error Resume Next
          If strFolderPath = "" Then
              Set OpenOutlookFolder = Nothing
          Else
              Do While Left(strFolderPath, 1) = "\"
                  strFolderPath = Right(strFolderPath, Len(strFolderPath) - 1)
              Loop
              arrFolders = Split(strFolderPath, "\")
              For Each varFolder In arrFolders
                  Select Case bolBeyondRoot
                      Case False
                          Set OpenOutlookFolder = Outlook.Session.Folders(varFolder)
                          bolBeyondRoot = True
                      Case True
                          Set OpenOutlookFolder = OpenOutlookFolder.Folders(varFolder)
                  End Select
                  If Err.Number <> 0 Then
                      Set OpenOutlookFolder = Nothing
                      Exit For
                  End If
              Next
          End If
          On Error GoTo 0
      End Function
      

      Now, modify line 12 of the original code from

      Set olkFld = Session.GetDefaultFolder(olFolderTasks).Items
      

      to

      Set olkFld = OpenOutlookFolder("Path to the target task folder").Items
      

      In case you aren’t familiar with paths in Outlooks, here’s an explanation of how they work.

      A folder path in Outlook is essentially the same as a folder path in the file system.  The one difference being that Outlook folder paths do not include a drive letter.  The path to a folder is a list of all the folders from the root to the target folder with each folder name separated from the preceding folder name by a backslash (i.e. \).  Consider the following folder structure:
      
      Mailbox - Doe, John
          - Calendar
          - Inbox
          - Tasks
      Personal Folders
          + Marketing
              + Proposals
              + Reviews
          + Projects
              + Project 1
              + Project 2
      
      The path to "Inbox" is "Mailbox - Doe, John\Inbox".
      The path to "Reviews" is "Personal Folders\Marketing\Reviews".
      The path to "Project 1" is "Personal Folders\Projects\Project 1".
      
    • Absolute magic, thanks. (I removed the ‘.items’). Now Excel and Outlook are talking to each other, and I don’t have to put my tasks in the default folder first.

    • Oops spoke too soon – while your code helped to take the next step I now have the problem of exporting a large number of task items to CSV/Excel with the following features-
      Multiple subfolders (standard export only permits one folder at a time) – I guess it would be relatively simple to cycle through all subfolders, but what about a deep tree with an unknown depth?
      Large task Notes fields (a type mismatch occurs in the macro and it seems that excel relating to this field -and anyway won’t accept fields bigger than 256char? so maybe CSV is the way to go as apparently there is no limit on field size with CSV.
      Any thoughts gratefully received!
      Jon

    • Jon,

      Just a quick note to let you know that I saw your posts and am not ignoring you. It’ll be a couple of days before I have time to respond.

    • Jon,

      Yes, it’s easy to make alter the code so it cycles through sub-folders. The depth is immaterial. I’ll add a revision to the original post that shows how to do this. I’ll try to do that today or tomorrow, but can’t promise I’ll be able to meet that goal.

    • David – thanks. Whatever you can do is very warmly received… but not in a rush; this is a personal project. I do my coding in bursts so I might get around to some more this weekend or maybe next. (Not my day job – just as well otherwise I would be broke!)

    • Jon,

      It clearly took me much longer to get the solution posted, and for that I apologize. Please see revision 2. It allows you to specify the starting folder and processes all the sub-folders under that folder to an unlimited depth.

    • David – That is the best; I can’t wait to use it. I will let you know how I get on after the weekend. Many many thanks!
      Jon

    • Hi Jon…

      I have struggling to make it work the function OpenOutlookFolder into my VBA code but cannot make it to work… it continuosly pops out with an Error 91: Object Variable or With block variable not set…

      Can you tell me how did you make it to work referencing this function into the code?

  4. Hi David,

    I am now using the macro to great effect and it’s saving me some time which is brilliant.

    Due to the nature of my role I am not always in the office but complete tasks via my blackberry, when I run the macro it tells me about the activity on the current day, is there any way of being able to select date for the macro to check for?

    I was thinking a pop up box that gave you an option to enter a date and a button that says today.

    Any help would be greatly received.

    Thanks

  5. Hi David,

    Not sure what happened yesterday, I looked at the code again and your original code worked fine, not sure why the headings didn’t appear in my first attempt.

    Many thanks again

    • Hi David,

      Thanks for the new code, works exactly how I need it to. (with a tweak).

      I have noticed that the date written to the spreadsheet was always the date the macro ran, not the date changed in the msg box.

      I changed the variable from date to datTarget and the code now writes the date you input into the msg box.

      Thanks again David.

    • You’re welcome, Richard. Sorry I missed changing that one variable. Thanks for letting me know. I’ll go fix it in the post. Cheers!

  6. Hi David, this is exactly what I needed! Thanks for your help.

    I have noticed a few problems but have modified the code slightly around the if else statement. If the macro creates the worksheet the headings don’t appear.

    I can’t thank you enough for helping me with this solution.

    • You’re welcome, Richard.

      That’s odd. I ran it here several times and it always created the headings. How did you modify the code to get it working?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s