Saltar al contenido

BAJAR ADJUNTOS EMAIL


Recommended Posts

Buenos días chicos ,

He revisado que mi consulta no estuviera resuelta y no la he encontrado.He visto algunas parecidas pero lo que necesito concretamente.

1-OBJETIVO

Tengo un archivo excel donde llevo el control economico de proyectos de inevrsión y quiero que desde el excel me baje los archivos adjuntos de los emails seleccionados en el outlook y me los guarde en la carpeta OFERTAS.Estos archivos son ofertas relacionadas con el proyecto de inversión y quiero ahorrar tiempo en la acción de bajar estos archivos adjuntos.

Lo que me interesa es que me baje los archivos del email seleccionado  o emails que yo seleccione , y no de los emails marcados como no leidos.

Quiero esto en concreto porque la macro original me baja los emails marcados como no leidos y esto es muy engorroso porque hay usuarios en mi empresa que tienen muchos emails marcados como no leidos hace que se bajen demasiados archivos adjuntos que no tienen nada que ver con el adjunto que me interesa.

2-PROBLEMA

La macro me baja los adjuntos de los emails marcados como no leidos y yo quiero solo los emails que yo seleccione manualmente.

3-PROGRAMACION DE LA MACRO

Os dejo el modulo con la programación de la macro en cuestión.Creo que me la baje de este foro.

Const olFolderInbox As Integer = 6

Sub DownloadAttachmentFirstUnreadEmail()
Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object, oOlAtch As Object

Application.DisplayAlerts = False

'~~> New File Name for the attachment
Dim NewFileName As String
NewFileName = ThisWorkbook.path & "\OFERTAS\"

'~~> Get Outlook instance
Set oOlAp = GetObject(, "Outlook.application")
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

 '~~> Check if there are any actual emails
If oOlInb.items.Restrict("[UnRead] = false").Count = 0 Then Exit Sub

'~~> Extract the attachment files
For Each oOlItm In oOlInb.items.Restrict("[UnRead] = true")


    '~~> Check if the email actually has an attachment
    If oOlItm.Attachments.Count <> 0 Then
        For Each oOlAtch In oOlItm.Attachments
            '~~> Download the attachment
            oOlAtch.SaveAsFile NewFileName & oOlAtch.Filename
            '[ActiveCell]= oOlAtch.DisplayName
            
           
        Next
    End If
    
    
Next

End Sub

 

Saludos y muchas gracias de antemano,

Enlace a comentario
Compartir con otras webs

Hace 3 horas, mbriculle dijo:

'~~> Check if there are any actual emails
If oOlInb.items.Restrict("[UnRead] = false").Count = 0 Then Exit Sub

'~~> Extract the attachment files
For Each oOlItm In oOlInb.items.Restrict("[UnRead] = true")

Hola @mbriculle

Estas son las líneas que realizan el filtro en el correo "de todos los no leídos", modifica estas líneas.

No uso Outlook, por restricciones de la empresa, no logre hacer pruebas, pero te dejo este link:

https://stackoverflow.com/questions/33261598/display-email-body-of-selected-email-in-outlook-as-a-message-box-in-excel

En lo que alguien más atiende la consulta. Espero pueda ser de utilidad.

Enlace a comentario
Compartir con otras webs

Muchas gracias mauricio

he intentado cambiarlo pero me falta poner los codigos para que sólo me baje los adjuntos de los emails que yo seleccione.

Te copio el desarrollo .Con estas lineas lo que me hace es bajarme todos los adjuntos de los emails que tengo en la bandeja de entrada .

 

Const olFolderInbox As Integer = 6

Sub DownloadAttachmentFirstUnreadEmail()
Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object, oOlAtch As Object

Dim objItem As Object


Application.DisplayAlerts = False

'~~> New File Name for the attachment
Dim NewFileName As String
NewFileName = ThisWorkbook.path & "\OFERTAS\"

'~~> Get Outlook instance
Set oOlAp = GetObject(, "Outlook.application")
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)
Set objItem = oOlAp.ActiveExplorer.Selection.Item(1)


i = 0

If oOlInb.items.Count = 0 Then
MsgBox "There are no messages in folder.", vbInformation, _
"Nothing Found"

Exit Sub
End If

If oOlInb.items.Count > 0 Then
For Each oOlItm In oOlInb.items
For Each oOlAtch In oOlItm.Attachments
oOlAtch.SaveAsFile NewFileName & oOlAtch.FileName

i = i + 1
Next oOlAtch
Next oOlItm
End If


End Sub

 

A ver si me podeis ayudar. :)

Enlace a comentario
Compartir con otras webs

Hola.

Prueba con el siguiente código:

Sub DescargarAdjuntos()
Dim olApp As Outlook.Application
Dim olExpl As Outlook.Explorer
Dim olSel As Outlook.Selection
Dim olMail As Outlook.MailItem
Dim olAdj As Outlook.Attachment
Dim iÍnd As Integer
Dim sUbic As String
Dim lArc As Long

    sUbic = ThisWorkbook.Path & "\OFERTAS\"
    Set olApp = GetObject(, "Outlook.application")
    Set olExpl = olApp.ActiveExplorer
    Set olSel = olExpl.Selection
    
    On Error Resume Next
    For Each olMail In olSel
        If olMail.Class = 43 Then
            For Each olAdj In olMail.Attachments
                olAdj.SaveAsFile sUbic & olAdj.Filename
                lArc = lArc + 1
            Next
        End If
    Next
    On Error GoTo 0

    MsgBox "Se han guardado " & Format(lArc, "#,##0") & " ficheros.", vbInformation, "TERMINADO"
    
End Sub

Hay que tener en cuenta que Outlook entiende por adjunto todo lo que no es texto. Por ejemplo, si el correo tiene una o varias imágenes, como puede ser el logotipo de la empresa, éstas se consideran también adjuntos y por lo tanto también las descargará. Por esta razón, quizá deberías considerar filtrar el tipo de archivo (excel, pdf, etc).

 

Un saludo.

PS.  En el código anterior no está contemplado que correos distintos tengan adjuntos con el mismo nombre.  Si se diera el caso, habría que modificarlo para que no se sobreescriban.

Enlace a comentario
Compartir con otras webs

Hola @mbriculle

Prueba así

->> 

Const olFolderInbox As Integer = 6

Sub DownloadAttachmentSelectedEmail()
Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object, oOlAtch As Object

Dim objItem As Object

Application.DisplayAlerts = False

'~~> New File Name for the attachment
Dim NewFileName As String
NewFileName = ThisWorkbook.Path & "\OFERTAS\"

'~~> Get Outlook instance
Set oOlAp = GetObject(, "Outlook.application")
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)
Set objItem = oOlAp.ActiveExplorer.Selection

''MsgBox oOlAp.ActiveExplorer.Selection.Count

i = 0
a = 0

If objItem.Count = 0 Then
MsgBox "There are no messages in folder.", vbInformation, _
"Nothing Found"
Exit Sub

ElseIf objItem.Count > 0 Then
    For Each oOlItm In objItem
        For Each oOlAtch In oOlItm.Attachments
            oOlAtch.SaveAsFile NewFileName & oOlAtch.Filename
            
            i = i + 1
        Next oOlAtch
        ''MsgBox oOlItm
    Next oOlItm
End If


End Sub
 

<<-

Nos comentas.

Enlace a comentario
Compartir con otras webs

Hola Mauricio,

 

Me ha funcionado a la perfección.He seleccionado 3 emails de la bandeka de entrada y me ha bajado solo los adjuntos de esos 3 emails,

Sois unos cracks.

 

Muchisimas gracias ,

Un abrazo,

Enlace a comentario
Compartir con otras webs

Hola qwerty123

Me ha funcionado a la perfección también.

Solo he tenido que cambiar 

Dim olApp As Outlook.Application
Dim olExpl As Outlook.Explorer
Dim olSel As Outlook.Selection
Dim olMail As Outlook.MailItem
Dim olAdj As Outlook.Attachment

 

Y poner al final Object.

Dim olApp As Object

Dim olExpl As Object
Dim olSel As Object
Dim olMail As Object
Dim olAdj As Object

 

Con este cambio ha funcionado muy bien

Estoy encantada con vosotros .Sois unos cracks

 

Muchas gracias ,

Enlace a comentario
Compartir con otras webs

Hace 41 minutos , mbriculle dijo:

Como podría excluir los archivos que sean imagenes  como JPG, PNG ??

Una sugerencia para esta última pregunta:

If objItem.Count = 0 Then
MsgBox "There are no messages in folder.", vbInformation, _
"Nothing Found"
Exit Sub
    ElseIf objItem.Count > 0 Then
        For Each oOlItm In objItem
            For Each oOlAtch In oOlItm.Attachments
                ''MsgBox InStr(1, oOlAtch.Filename, ".", vbTextCompare)
                ''MsgBox Mid(oOlAtch.Filename, InStr(1, oOlAtch.Filename, ".", vbTextCompare) + 1, 1)

''->> Aqui se busca la primera letra de la extensión dle archivo
                If Mid(oOlAtch.Filename, InStr(1, oOlAtch.Filename, ".", vbTextCompare) + 1, 1) = "x" Then
                    oOlAtch.SaveAsFile NewFileName & oOlAtch.Filename
                End If
                
                i = i + 1
            Next oOlAtch
            ''MsgBox oOlItm
        Next oOlItm
End If

 

Espero sea de utilidad

Enlace a comentario
Compartir con otras webs

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 96 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      177
    • Comentarios
      90
    • Revisiones
      27

  • Crear macros Excel

  • Mensajes

    • Buenas noches quisiera hacer esta formula auto incremental    =SI(INDIRECTO("'Casos de Prueba'!I1")="Resultados Ciclo 1"; SI(CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")=0; 0; CONTAR.SI(INDIRECTO("'Casos de Prueba'!I:I"); "OK")); 0)      para que cada vez que copiase y pegase la celda con la formula  se incrementara la letra en este caso la I pasara a J ,como el numero perteneciente a Resultados Ciclo pasando en este caso del 1 al 2.   Tengo también esta formula =CONCATENAR("CP";TEXTO(MAX((SI((ESNUMERO(HALLAR("CP";A$1:A1)))*(A$1:A1<>"");VALOR(EXTRAE(A$1:A1;3;3));0))+1);"000")&" - "&B2) quisiera que no tuviera los 3 ceros si no que fuera por ejemplo CP1 y se fuera incrementando. Gracias un saludo.
    • Con el diseño así como lo tiene en su libro, una fórmula de BUSCARV con COINCIDIR debería ser de utilidad =C5*BUSCARV($C$1,Tabla1[#Todo],COINCIDIR($D5,Tabla1[#Encabezados],0)) Es con lo que participaría en su consulta. Lo que resta es definir que hacer si no encuentra la OT porque así como esta le devolvería error en ese caso, o si tiene condiciones que haya podido omitir también le afectarían el resultado.
    • He cambiado mi macro a este: Sub repetir() Set a = Sheets(ActiveSheet.Name) uf = a.Range("C" & Rows.Count).End(xlUp).Row 'ultima fila con datos ActiveCell.Select ActiveCell.Offset(1, 0).Select   'Application.OnTime Now + TimeValue("00:00:10"), "repetir", , True End If End Sub   Lo que no se es como detenerlo al llegar a la ultima fila con datos de la columna C. Muchas gracias
    • Buenas tardes a todos. Tengo un problema que preciso de vuestra ayuda.  Tengo que controlar los gastos de la oficina que trabajo y he de repartir unos gastos a % según una OT y unos tipos de gastos. Envío un archivo adjunto. Lo que necesito es que lo que aparece en la columna en amarillo lo haga automáticamente, teniendo en cuenta los datos de la tabla a la derecha. Por ejemplo, el primer gasto tiene una cuota de 1477 euros y teniendo en cuenta que es un gasto de tipo Común y que la OT es la 12810234, le corresponde un gasto de 605,57 euros ya que según la tabla de la derecha su % a imputar es de un 41%. ¿alguien me puede ayudar con la formula? He de añadir muchas más líneas y más hojas con el resto de OT y en el futuro cambiar más datos, así que necesito automatizarlo con una formula Excel. Gracias. Control de gastos.xlsx
    • Hola buenas tardes: Por favor me pueden ayudar a realizar lo siguiente. ejecutar una macro después de un tiempo, que recorra una columna a partir de la celda activa hacia abajo. Es una lista extensa, que filtro desde la columna B. y solo me muestra las filas que me interesan. ejemplo: Si mi celda activa es la C23 ejecutar la macro y baje una celda y repite la macro después de 20 segundos y lo vuelve hacer(Simpre bajando una celda), y que este se detenga hasta la ultima fila que este visible en el filtro. Ya que puedo tener muchos datos mas.   Gracias   Prueba filtro y avance.xlsm
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.