Encontré esta página donde colocan código para automatizar Tareas en Outlook... Muy buena.
http://www.outlookcode.com
Vi en evolution una opción para convertir los correos en tareas, me gustó porque en Outlook la opción de seguimiento es muy buena pero los pendientes de seguimiento no se me reflejan en el celular, así que buscando encontré unas funciones que con sólo copiar y pegar me funcionaron:
Simplemente se crea un boton en una barra de herramientas que ejecute la macro CreaTarea y listo, al darle click sobre el botón, el correo actual seleccionado queda como una tarea.
Voy a seguirlo revisando para realizarle algunas adecuaciones según lo que necesito.
código comentado y modificado:
Aquí el proceso para ponerlo a funcionar en el outlook:
Copiamos el código en el editor de VB
Creamos la barra de herramientas y el botón para ejecutar la acción:
http://www.outlookcode.com
Vi en evolution una opción para convertir los correos en tareas, me gustó porque en Outlook la opción de seguimiento es muy buena pero los pendientes de seguimiento no se me reflejan en el celular, así que buscando encontré unas funciones que con sólo copiar y pegar me funcionaron:
Código:
Sub MakeTaskFromMail2(MyMail As Outlook.MailItem)
Dim strID As String
Dim olNS As Outlook.NameSpace
Dim olMail As Outlook.MailItem
Dim objTask As Outlook.TaskItem
strID = MyMail.EntryID
Set olNS = Application.GetNamespace("MAPI")
Set olMail = olNS.GetItemFromID(strID)
Set objTask = Application.CreateItem(olTaskItem)
With objTask
.Subject = olMail.Subject
.DueDate = olMail.SentOn
.Body = olMail.Body
End With
Call CopyAttachments(olMail, objTask)
objTask.Save
Set objTask = Nothing
Set olMail = Nothing
Set olNS = Nothing
End Sub
Sub CopyAttachments(objSourceItem, objTargetItem)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
strPath = fldTemp.Path & "\"
For Each objAtt In objSourceItem.Attachments
strFile = strPath & objAtt.FileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
fso.DeleteFile strFile
Next
Set fldTemp = Nothing
Set fso = Nothing
End Sub
Sub CreaTarea()
Dim myItem As Object
Set myItem = GetCurrentItem()
If myItem.Class = olMail Then
MakeTaskFromMail2 myItem
End If
End Sub
Simplemente se crea un boton en una barra de herramientas que ejecute la macro CreaTarea y listo, al darle click sobre el botón, el correo actual seleccionado queda como una tarea.
Voy a seguirlo revisando para realizarle algunas adecuaciones según lo que necesito.
código comentado y modificado:
'---------------------------------------------------------------------------------------
' Procedure : MakeTaskFromMail2
' DateTime :
' Author : Sue Mosher
' Purpose : Creea una tarea a apartir de un correo electrónico.
'---------------------------------------------------------------------------------------
'
Sub MakeTaskFromMail2(MyMail As Outlook.MailItem)
Dim strID As String
Dim olNS As Outlook.NameSpace
Dim olMail As Outlook.MailItem
Dim objTask As Outlook.TaskItem
'Variables para recibir parámetros
Dim STR_MensajeTarea As String
Dim INT_Dias_Vence As Variant
'Carga el identificador del objeto para hacer referencia a el
strID = MyMail.EntryID
'Carga los datos del objeto
Set olNS = Application.GetNamespace("MAPI")
Set olMail = olNS.GetItemFromID(strID)
'Crea la nueva tarea
Set objTask = Application.CreateItem(olTaskItem)
'Pide el título de la tarea, por defecto se trae el Subject del Correo
STR_MensajeTarea = InputBox("Ingrese el título de la tarea", "Crear Tarea", olMail.Subject)
'Se pide el número de días en que vence la tarea. Si el parámetro no es número lo solicita nuevamente.
INT_Dias_Vence = 1
Do
INT_Dias_Vence = InputBox("Ingrese el # de días en que vence la tarea", "Crear Tarea", 1)
Loop Until IsNumeric(INT_Dias_Vence) = True
'Carga los datos de la Tarea
With objTask
'título de la tarea
.Subject = STR_MensajeTarea
'Fecha de Vencimiento (Fecha del correo + número de días de vencimiento)
.DueDate = DateAdd("d", INT_Dias_Vence, olMail.SentOn)
'texto del correo como texto de la tarea
.Body = olMail.Body
End With
'Copia los Adjuntos al mensaje Original
'Call CopyAttachments(olMail, objTask)
'Guarda los datos de la tarea
objTask.Save
'Libera los objetos de la memoria
Set objTask = Nothing
Set olMail = Nothing
Set olNS = Nothing
End Sub
'---------------------------------------------------------------------------------------
' Procedure : CopyAttachments
' DateTime :
' Author : Sue Mosher
' Purpose : Copia los adjuntos de un objeto a otro
'---------------------------------------------------------------------------------------
'
Sub CopyAttachments(objSourceItem, objTargetItem)
Set fso = CreateObject("Scripting.FileSystemObject")
Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
strPath = fldTemp.Path & "\"
For Each objAtt In objSourceItem.Attachments
strFile = strPath & objAtt.FileName
objAtt.SaveAsFile strFile
objTargetItem.Attachments.Add strFile, , , objAtt.DisplayName
fso.DeleteFile strFile
Next
Set fldTemp = Nothing
Set fso = Nothing
End Sub
'---------------------------------------------------------------------------------------
' Procedure : CreaTarea
' DateTime :
' Author : Sue Mosher
' Purpose :
'---------------------------------------------------------------------------------------
'
Sub CreaTarea()
Dim myItem As Object
'Carga el objeto actual
Set myItem = GetCurrentItem()
'Válida que sea de tipo correo elctrónico
If myItem.Class = olMail Then
MakeTaskFromMail2 myItem
End If
End Sub
'---------------------------------------------------------------------------------------
' Procedure : GetCurrentItem
' DateTime :
' Author : Sue Mosher
' Purpose : Retorna el objeto de outlook actualmente activo
'---------------------------------------------------------------------------------------
'
Function GetCurrentItem() As Object
Dim objApp As Outlook.Application
Set objApp = CreateObject("Outlook.Application")
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
Case "Explorer"
Set GetCurrentItem = objApp.ActiveExplorer.Selection.Item(1)
Case "Inspector"
Set GetCurrentItem = objApp.ActiveInspector.CurrentItem
Case Else
' anything else will result in an error, which is
' why we have the error handler above
End Select
Set objApp = Nothing
End Function
Aquí el proceso para ponerlo a funcionar en el outlook:
Copiamos el código en el editor de VB
Creamos la barra de herramientas y el botón para ejecutar la acción: