Este artigo  pode te ajudar muito se você recebe muitos emails ou que possui muitos emails em sua caixa de entrada e deseja organizar os emails mas não sabe por onde começar, aprenda como carregar e-mails do outlook para o excel.

Esta postagem foi revisada onde foram incluídos os seguintes itens no código:

Cells(r, "G") = olItem.LastModificationTime 'Última modificação
Cells(r, "H") = olItem.Categories 'Categoria
Cells(r, "I") = olItem.SenderName 'Nome do remetente
Cells(r, "J") = olItem.FlagRequest 'Acompanhamento

 

De tempos em tempos dou uma boa organizada em meu outlook revendo a estrutura de pastas, tarefas, agenda e emails e esta semana estava no escritório e achei que esta deveria ser a hora de fazer isso novamente, porém isso é uma tarefa que leva tempo e como sou um pouco chato com estas coisas de organização, não gosto de apenas jogar os emails em uma pasta de arquivo morto e pronto, acho que tudo tem de ter o seu lugar.

Como qualquer coisa na vida ou projeto que vamos fazer temos de ter dimensão do tamanho deste para que assim possamos ter um norte de por onde devemos partir e o que fazer, porém isso tudo é muito massante, desgastante e acaba sendo um pouco trabalhoso.

O código abaixo vai lhe ajudar a listar no Microsoft Excel os emails do seu arquivo PST linha após linha, email, data, remetente e anexos.

Este código tem um pedaço de uma rotina que encontrei no StackOverflow e em um fórum de Access…
Preciso verificar meu histórico do celular pois foi via mobile que encontrei, após isso colocarei o link com o crédito.

O código faz referencia ao Microsoft Outlook ‘GetObject(, “Outlook.Application”)’ onde ele define os objetos, faz a verificação se o objeto existe e se caso não existir cria o objeto ‘CreateObject(“Outlook.Application”)’

Após exportar os dados para o Excel, basta fazer uma Tabela Dinâmica e visualizar os dados como desejar.

Carregar e-mails do outlook para o excel:

Sub Emails_Outlook()

'Carregar e-mails do outlook para o excel
Dim appOutlook As Object
Dim olNS As Object
Dim olFolder As Object
Dim olItem As Object
Dim r As Long

On Error Resume Next
Set appOutlook = GetObject(, "Outlook.Application")

If appOutlook Is Nothing Then

Set appOutlook = CreateObject("Outlook.Application")

End If

On Error GoTo 0

Set olNS = appOutlook.GetNamespace("MAPI")
'Abaixo preencha o nome do arquivo de dados PST e a pasta.
'Neste caso o arquivo é Douglas Godoy e a pasta Caixa de Entrada.
Set olFolder = olNS.Folders("Douglas Godoy").Folders("Caixa de Entrada")
Cells.Delete
r = 3

'Cria um array montando o título das colunas no arquivo.
Range("A3:K3") = Array("Título", "Quem enviou", "Para", "Data e Hora", "Anexos", "Tamanho","Última modificação","Categoria","Nome do Remetente","Tipo de acompanhamento","Conteúdo")

For Each olItem In olFolder.Items
If TypeName(olItem) = "MailItem" Then
r = r + 1

Cells(r, "A") = olItem.Subject 'Assunto do e-mail
Cells(r, "B") = olItem.SenderEmailAddress 'E-mail do remetente
Cells(r, "C") = olItem.To 'E-mail do destinatário
Cells(r, "D") = olItem.ReceivedTime 'Data/Hora de recebimento
Cells(r, "E") = olItem.Attachments.Count 'Número de anexos
Cells(r, "F") = olItem.Size 'Tamanho da mensagem em bytes
Cells(r, "G") = olItem.LastModificationTime 'Última modificação
Cells(r, "H") = olItem.Categories 'Categoria
Cells(r, "I") = olItem.SenderName 'Nome do remetente
Cells(r, "J") = olItem.FlagRequest 'Acompanhamento
'Cells(r, "K") = olItem.Body 'Tome cuidado ao utilizar pois carrega os dados do corpo do email

Application.StatusBar = r

End If

Next olItem

Columns.AutoFit

End Sub

 

Observação: caso você não saiba qual o nome do seu arquivo de dados do Outlook, acesse:

Ferramenta Outlook – Menu Ferramentas – Configurações de Conta – Aba Arquivo de Dados.

O nome que consta na aba “Arquivo de dados que deve ser inserido em olNS.Folders(“Douglas Godoy”).

Carregar e-mails do outlook para o excel

Arquivo de dados do Microsoft Outlook.

Espero desta forma ter lhe ajudado a buscar seus emails em sua caixa de entrada, desta forma fica muito mais fácil saber por onde começar a organizar seus emails e o qual a situação atual do seu arquivo de dados.

Caso você conheça alguma outra forma Carregar e-mails do outlook para o excel, compartilhe, sua opinião é muito importante.

DICA:
Caso você queira aprender como listar todas tabelas dinamicas do seu arquivo em excel, deixo o artigo abaixo como dica!

Como Listar todas tabelas dinâmicas do seu arquivo Excel com VBA

Agradeço pela leitura e fico no aguardo de seus comentários e sugestões.

Um abraço. DG




.

Sobre o Autor

Comentários bacanas...

  1. flavia

    Olá,Parabéns,maravilhoso o seu conteúdo.
    Obrigada por compartulhar conhecimento.
    Gostaria de tirar uma duvida,te como rodar no Outlook Web ?
    Pois essa é a unica licença que minha empresa concede

  2. Fabio Baldessar

    Ola Douglas
    Muita bacana essa macro. Funcionou muito bem com a maioria dos e-mails.
    Contudo não deu certo com os e-mails “Mail Delivery System”
    Ao rodar a macro, não exibe nada.
    Poderia me ajudar por favor

      1. Lucas Garcez Paz

        Boa tarde Douglas,

        A macro funcionou direitinho, porém gostaria de fazer alguns ajustes:
        gostaria que a macro entra no email pré-definido por assunto e copie dados deste e-mail…
        é possível fazer? tu tens algo parecido?

        att,

      2. Franciane

        Oi, boa tarde…
        Tenho uma dúvida..

        Fiz uma macro para extrair as informações do outlook, deu certo no meu notebook pessoal mais no da empresa da erro, sabe me informar o porque disso? Basicamente ele não encontra a pasta caixa de entrada no Outlook.

        Office da empresa – 365 para grandes empresas
        Office pessoal – Professional Plus 2021

        Linha do erro.
        Set olFolder = olNS.Folders(“Douglas Godoy”).Folders(“Caixa de Entrada”)

  3. jorge

    Ola Douglas

    Excelente ideia de organizar os emails listando no Excel para facilitar.
    Rodei a macro mas quando encontra email sem remetente ele da erro (1004) pintando no VBE esta linha ” Cells(r, “B”) = olItem.SenderEmailAddress ‘E-mail do remetente”.
    Sera que voce pode me ajudar?
    Obrigado.

    1. Douglas Godoy Resposta do Autor

      Jorge, você pode colocar um tratamento de erro antes desta linha que dá erro.

      Coloca o comando: On error resume next.

      Pois quando der erro na linha de rementente vazio ele irá para a próxima linha de comando.

      Abraços

    2. Celi

      Jorge, muito boa a programação! É possível separar algumas informações específicas que estão dentro do corpo do e-mail e trazer em colunas. exemplo: nome, CPF, telefone, solicitação, prazo.
      Desde já obrigada!

  4. Ivan Rodrigues

    Douglas primeiramente parabéns pelo trabalho.
    Se você ainda ve o post me tira uma duvida esta dando erro em tempo de execução 91
    No olmail

  5. Pingback: Atualizar importação salva no access através do excel com vba - Douglas GodoyDouglas Godoy

  6. Joao Ferreira

    Douglas boa noite. Excelente Macro me ajuda muito.
    Mas temos como filtrar por assunto do email de uma subpasta?

    1. Douglas Godoy Resposta do Autor

      Tem sim João,

      Neste caso você deve colocar uma condicional antes da estrutura que irá carregar os dados na planilha…

      Exemplo…

      If olItem.Subject =”Titulo do e-mail” then

      Cells(r, “A”) = olItem.Subject ‘Assunto do e-mail
      Cells(r, “B”) = olItem.SenderEmailAddress ‘E-mail do remetente
      Cells(r, “C”) = olItem.To ‘E-mail do destinatário
      Cells(r, “D”) = olItem.ReceivedTime ‘Data/Hora de recebimento
      Cells(r, “E”) = olItem.Attachments.Count ‘Número de anexos
      Cells(r, “F”) = olItem.Size ‘Tamanho da mensagem em bytes
      Cells(r, “G”) = olMail.LastModificationTime ‘Última modificação
      Cells(r, “H”) = olMail.Categories ‘Categoria
      Cells(r, “I”) = olMail.SenderName ‘Nome do remetente
      Cells(r, “J”) = olMail.FlagRequest ‘Acompanhamento
      ‘Cells(r, “K”) = olItem.Body ‘Tome cuidado ao utilizar pois carrega os dados do corpo do email

      EndIf

  7. Rogério

    Boa noite!
    Estava justamente querendo fazer algo assim.. E voá-la, encontrei tudo pronto.. Muito obrigada por disponibilizar seu conteúdo aqui, me ajudou Muito. parabéns!

  8. João Roberto Ribeiro

    Bom dia Douglas. Ressuscitando o post, pois está sendo muito útil pra mim. Mas surgiu uma dúvida, vê se pode me ajudar.
    Quando executa a macro, ele dá erro de variável do objeto não definida e ao pedir pra depurar ele aponta a variável olMail
    Quando tiro todas as linhas com essa variável do código (que são as linhas incluídas na sua revisão), daí o código roda normal.
    Acredito que faltou declará-las, é isso?
    Espero que ainda esteja visualizando os comentários rsrs
    Parabéns pelo post!

    1. Douglas Godoy Resposta do Autor

      Olá João, boa tarde!

      Obrigado pelo seu comentário e visita ao site.
      Fiz o teste e realmente você tinha razão, ao declarar o item o código passa rodar completo.

      Este problema foi apresentado em alguns computadores com versões diferentes de office.

      Sempre que quiser comente e participe das postagens, isso é muito importante!

      Um abraço!

  9. Max SIlva

    Douglas, Bom dia!

    Parabéns e muito obrigado pelo post!

    Estou tetando aplicar em meu outlook, porem apresenta um erro de compilação: ‘Sub’ ou ‘Function’ nao definida.:

    ‘Cria um array montando o título das colunas no arquivo.
    Range(“A3:K3”)

  10. Fabricio

    Douglas tive um problema ,esta dando erro de sintaxe na linha do Array;
    Range(“A3:K3”)= Array(“Título”, “Quem enviou”, “Para”, “Data e Hora”, “Anexos”, “Tamanho”,”Última modificação”,”Categoria”,”Nome do Remetente”,”Tipo de acompanhamento”,”Conteúdo”)

    pode me auxiliar nessa?

  11. Diego Silva

    Douglas, bom dia.

    Primeiramente obrigado por compartilhar o seu conhecimento e pela atenção a minha mensagem.

    Fiz os passos conforme sua orientação, mas também obtive o erro:

    (“Erro em tempo de execução ’91’:
    A variável do objeto ou a variável do bloco ‘With’ não foi definida”)

    Esse erro ocorre justamente na linha Set olNS = appOutlook.GetNamespace(“POP3”) , já troquei o valor de “POP3” para “MAPI”, porém sem sucesso.

    O Meu pacote office é o 2010 e tenho 3 perfis de e-mails criados no Outlook, nesse caso preciso especificar também para qual perfil será executado o código?

    Muito obrigado

    Diego Silva
    diegofersilva@gmail.com

    Sub Emails_Outlook()
    Dim appOutlook As Object
    Dim olNS As Object
    Dim olFolder As Object
    Dim olItem As Object
    Dim r As Long

    On Error Resume Next
    Set appOutlook = GetObject(, “Outlook.Application”)

    If appOutlook Is Nothing Then

    Set appOutlook = CreateObject(“Outlook.Application”)

    End If

    On Error GoTo 0

    Set olNS = appOutlook.GetNamespace(“POP3”)
    ‘ Abaixo preencha o nome do arquivo de dados PST e a pasta.
    ‘ Neste caso o arquivo é Douglas Godoy e a pasta Caixa de Entrada.
    Set olFolder = olNS.Folders(“SPAM”).Folders(“SPAM”)
    Cells.Delete
    r = 3

    ‘ Cria um array montando o título das colunas no arquivo.
    ‘ Range(“A3:K3”) = Array(“Título”, “Quem enviou”, “Para”, “Data e Hora”, “Anexos”, “Tamanho”,”Última modificação”,”Categoria”,”Nome do Remetente”,”Tipo de acompanhamento”,”Conteúdo”)

    For Each olItem In olFolder.Items
    If TypeName(olItem) = “MailItem” Then
    r = r + 1

    Cells(r, “A”) = olItem.Subject ‘Assunto do e-mail
    Cells(r, “B”) = olItem.SenderEmailAddress ‘E-mail do remetente
    Cells(r, “C”) = olItem.To ‘E-mail do destinatário
    Cells(r, “D”) = olItem.ReceivedTime ‘Data/Hora de recebimento
    Cells(r, “E”) = olItem.Attachments.Count ‘Número de anexos
    Cells(r, “F”) = olItem.Size ‘Tamanho da mensagem em bytes
    Cells(r, “G”) = olMail.LastModificationTime ‘Última modificação
    Cells(r, “H”) = olMail.Categories ‘Categoria
    Cells(r, “I”) = olMail.SenderName ‘Nome do remetente
    Cells(r, “J”) = olMail.FlagRequest ‘Acompanhamento
    ‘ Cells(r, “K”) = olItem.Body ‘Tome cuidado ao utilizar pois carrega os dados do corpo do email

    Application.StatusBar = r

    End If

    Next olItem

    Columns.AutoFit

    End Sub

  12. Diego Favaro

    Opa, bom dia!

    Será que é possivel no .CC inserir um grupo de e-mail ja criado no outlook ? na primeira vez o e-mail vai, mas nas outras não envia., pode me ajudar?
    With OutMail
    .cc = ” *grupo do outlook”

    1. Douglas Godoy Resposta do Autor

      Olá Diego,

      É possivel sim, tente referenciar o nome do grupo em uma determinada célula e a partir daí fazer a leitura com uma variável.

      Ex:

      nome_grupo = Sheets(“Plan1”).Range(“A1”).value
      .cc = nome_grupo

      Espero que dê certo, e se conseguir nos avise!

      Um abraço.

      Douglas

  13. Cristiano

    Douglas fiz conforme sugerido porem aparece o erro “A variável do objeto ou a variável do bloco ‘With’ não foi definida”, no meu caso é email de empresa mas esta no outlook 2010, poderia me ajudar?

    Abaixo esta como colei e alterei o codigo no VBA EXCEL

    Sub Emails_Outlook()
    Dim appOutlook As Object
    Dim olNS As Object
    Dim olFolder As Object
    Dim olItem As Object
    Dim r As Long

    On Error Resume Next
    Set appOutlook = GetObject(, “Outlook.Application”)

    If appOutlook Is Nothing Then

    Set appOutlook = CreateObject(“Outlook.Application”)

    End If

    On Error GoTo 0

    Set olNS = appOutlook.GetNamespace(“POP3”)
    Set olFolder = olNS.Folders(“cristiano.lorenzato@tgmservicos.com.br”).Folders(“Arquivos do Outlook”)
    Cells.Delete
    r = 3

    Range(“A3:K3”) = Array(“Título”, “Quem_enviou”, “Para”, “Data”, “Anexos”, “Tamanho”, ”Modificação”, ”Categoria”, ”Remetente”, ”Acompanhamento”, ”Conteúdo”)

    For Each olItem In olFolder.Items
    If TypeName(olItem) = “MailItem” Then
    r = r + 1

    Cells(r, “A”) = olItem.Subject ‘Assunto do e-mail’
    Cells(r, “B”) = olItem.SenderEmailAddress ‘E-mail do remetente’
    Cells(r, “C”) = olItem.To ‘E-mail do destinatário’
    Cells(r, “D”) = olItem.ReceivedTime ‘Data/Hora de recebimento’
    Cells(r, “E”) = olItem.Attachments.Count ‘Número de anexos’
    Cells(r, “F”) = olItem.Size ‘Tamanho da mensagem em bytes’
    Cells(r, “G”) = olMail.LastModificationTime ‘Última modificação’
    Cells(r, “H”) = olMail.Categories ‘Categoria’
    Cells(r, “I”) = olMail.SenderName ‘Nome do remetente’
    Cells(r, “J”) = olMail.FlagRequest ‘Acompanhamento’
    Cells(r, “K”) = olItem.Body ‘Tome cuidado ao utilizar pois carrega os dados do corpo do email’

    Application.StatusBar = r

    End If

    Next olItem

    Columns.AutoFit

    End Sub

    1. Douglas Godoy Resposta do Autor

      Cristiano, Bom dia!

      Tudo bom meu caro? Espero que sim…

      Indo para sua dúvida…
      Acredito que o problema esteja na linha

      Set olNS = appOutlook.GetNamespace(“POP3”)

      Tente trocar esta linha para:

      Set olNS = appOutlook.GetNamespace(“MAPI”)

      O MAPI (Messaging Application Programming Interface) é usado no Outlook com um servidor de email que executa o Exchange.

      É um Acrônimo de Messaging Application Programming Language. É a Especificação de interface da Microsoft que permite que diversas aplicações de troca de mensagens e de grupo de trabalho (inclusive correio eletrônico, correio de voz e fax) operem através de um único cliente.
      Ele é que faz a comunicação dos aplicativos Excel X Outlook, a porta de entrada.

      Peço que verifique e faça o teste e depois me responda se deu certo!

      Abraços.

      Abs

      Douglas Godoy

  14. Leandro

    Oi Douglas, boa tarde. Preciso do código VBA de um contato associado a mensagem. Quando você abre e mensagem de outlook e vincula um contato a ela, na propriedade “marcas” do outlook. É o campo que aparece, ao escolher no seletor de campos, o campos contatos.
    Tentei o código .FormDescription.ContactName. Porém o mesmo não funcionou, vem e mrbanco. Você tem alguma ideia para me ajudar? Conseguiu entender minha dúvida?

  15. Luiz

    Boa tarde! Sou leigo no assunto e preciso saber como posso executar esse código? Trabalho com pousadas e recebo e-mails com formulários que contem dados como periodo, quantidade de pessoas, etc. Preciso desses dados em planilhas.

  16. ROGERIO FERNANDES CUNHA

    Bom dia Douglas,

    Ótimo post, esta me ajudando muito.

    Vocês sabe como podemos salvar um e-mail via VBA editando o Título incluindo a data e a hora recebida e salvando em [assunto].MSG

    Grato

  17. Jefferson

    Boa tarde Douglas!
    Ótimo conteúdo, muito me ajudou este tutorial.
    Eu gerencio grande parte dos KPIs e indicadores onde trabalho.
    Temos necessitado muito de automatiza-los, pois hoje gastamos bastante tempo na elaboração.
    Usamos em paralelo o Minitab para criar uma gráfico de dispersão um pouco rico, porém preciso gera-lo mais rápido e gostaria de temos como uma especie de Dashboard alterando apenas a data. Pode me ajudar? Quando crio Dashbords normalmente uso Tabela Dinâmica, mas ela não permite a geração de gráficos de dispersão. Eu ainda sou iniciante em VBA com isso não consegui gerar outra alternativa, mas tenho bastante urgência em automatiza-lo. Pode me ajudar?

  18. Luiz Elias

    Douglas, muito bom o código!

    Tem como filtrar um determinado intervalo de data? por exemplo, eu quero que traga os emails de determinada pasta com data de recebimento >= 01/07/2015 e <= 30/07/2015 ?

    Agradeço desde já a sua ajuda.

  19. Vitor Rodrigues

    Olá, boa tarde. Gostei muito do código, mas… Preciso criar uma rotina que puxe os emails de uma conta do Outlook. A conta é uma só que há subpastas separando os tipos de arquivos. Pretendo criar uma planilha para cada subpasta do Outlook, e colocá-las cada uma conforme a seu arquivo. Como faço isso a partir de seu código?

    1. Vitor Rodrigues

      Já resolvi o problema abaixo, mas preciso contar a quantidade de emails de cada subpasta. Tento fazer por fórmulas, mas quando executo o código, ele quebra as fórmulas. Alguma luz?

  20. Marcio Yokoyama

    Estava procurando algo do tipo.
    Acho que tem um equívoco de digitação em seu código. Nas linhas Cells(r,”G”)… e Cells(r, “J), precisa trocar olMail por olItem.

  21. Mario

    Caro Douglas,
    Obrigado ela informação.
    Percebi que o programa tem um limitação.
    Não consegue baixar mais que 100 email.
    Há alguma solução? e porque?
    Obrigado novamente

    1. Douglas Godoy Resposta do Autor

      Marcelo, Boa noite!

      Obrigado pela visita e pelo comentário no site.

      Para buscar a informação de Subpastas pasta adicionar novamente o .Folders(“NOME DA PASTA”) como no exemplo abaixo:

      Set olFolder = olNS.Folders(“Douglas Godoy”).Folders(“Projetos”).Folders(“2015”)

      Espero ter ajudado e se precisar de algo mais comente.

      Um abraço

      Douglas

  22. Ederson Arruda

    Olá Douglas
    Primeiramente devo parabenizá-lo pela ótima dica, foi muito útil e aproveitando o seu conhecimento, gostaria de saber se existe uma forma de ordenar a pasta por data?

    Por exemplo:
    Ordenar a pasta por data decrescente
    Set olFolder = olNS.Folders(“Douglas Godoy”).Folders(“Caixa de Entrada”)

    Tenho uma aplicação em um cliente e seria importante conseguir esta informação.

    Obrigado.

    Ederson Arruda
    http://www.excelessencial.com

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *