Usuário com melhor resposta
Macro para salvar anexos automaticamente no outlook 2007 para uma pasta

Pergunta
-
Pessoal solicito ajuda.
Preciso configurar o Outlook para que assim que receber um email, ele verifique se este e-mail contem anexo. No caso de conter anexo ele faça uma cópia deste anexo para uma pasta no diretório c:.
Este e-mail estará configurado em sevirdor, recebendo arquivos .XML referente a nota fiscal eletrônica.
Sei que exite uma forma via Macro (VB), mais sinceramente não tenho conhecimento para criar uma macro da forma que desejo.
desde já agradeço.
Rodrigo Piedade. TI
Respostas
-
Pessoal depois de uma procura de 8 dias rrsrrsrs...
Encontrei um tutorial bem simples e facil (Em português), eu testei e funcionou perfeitamente...
Basta alterar o formato do arquivo e depois adequar a cada necessidade.http://www.ambienteoffice.com.br/outlook/executar_macro_ao_receber_e-mail/
http://www.ambienteoffice.com.br/outlook/salvar_anexos_de_novas_mensagens_numa_pasta/Abraços.
Edson Matias Fagundes Junior (Nioks)- Sugerido como Resposta Edson Matias Fagundes Junior terça-feira, 9 de agosto de 2011 17:32
- Marcado como Resposta Fábio JrModerator segunda-feira, 12 de setembro de 2011 12:17
Todas as Respostas
-
Também tenho esta necessidade pelo mesmo motivo.
O Fisco nos obriga a guardar o XML recebido dos fornecedores, e portanto, seria muito útil que uma ferramenta analisasse o e-mail e sendo um XML, salvasse o anexo em uma pasta determinada para isto.
Evandro Milani
TI - DN Automação -
-
Segue o link.
http://www.fontstuff.com/outlook/oltut01.htm
Possui um how to para desenvolvimento da sua macro amigo.
[]'s,
" Qm tem boca vai a roma, meu fogão tem 6 e não saiu da cozinha ainda"- Sugerido como Resposta Edson Matias Fagundes Junior segunda-feira, 8 de agosto de 2011 23:24
- Não Sugerido como Resposta Edson Matias Fagundes Junior terça-feira, 9 de agosto de 2011 00:54
-
-
-
Este script esta pronto para XML, se quiser outra extensão basta mudar no código.
Public Sub ProcessarAnexo(Email As MailItem)
Dim DiretorioAnexos As String
DiretorioAnexos = "colocar aqui a pasta destino. pode ser local em rede também"Dim MailID As String
Dim Mail As Outlook.MailItem
MailID = Email.EntryID
Set Mail = Application.Session.GetItemFromID(MailID)
For Each Anexo In Mail.Attachments
If Right(Anexo.FileName, 3) = "xml" Then
MsgBox (Anexo.FileName)
Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName
End If
Next
Set Mail = Nothing
End Sub- Sugerido como Resposta Benilton Barbosa terça-feira, 6 de setembro de 2011 02:05
- Não Sugerido como Resposta Benilton Barbosa terça-feira, 6 de setembro de 2011 02:05
- Sugerido como Resposta Benilton Barbosa terça-feira, 6 de setembro de 2011 02:05
-
Pessoal depois de uma procura de 8 dias rrsrrsrs...
Encontrei um tutorial bem simples e facil (Em português), eu testei e funcionou perfeitamente...
Basta alterar o formato do arquivo e depois adequar a cada necessidade.http://www.ambienteoffice.com.br/outlook/executar_macro_ao_receber_e-mail/
http://www.ambienteoffice.com.br/outlook/salvar_anexos_de_novas_mensagens_numa_pasta/Abraços.
Edson Matias Fagundes Junior (Nioks)- Sugerido como Resposta Edson Matias Fagundes Junior terça-feira, 9 de agosto de 2011 17:32
- Marcado como Resposta Fábio JrModerator segunda-feira, 12 de setembro de 2011 12:17
-
Mas como fazer esses macros para salvar pelo nome do arquivo e em várias pastas diferentes?
Ainda não entendi como fazer...
Obrigada
- Editado Cíntia Melo segunda-feira, 31 de outubro de 2011 13:37
- Sugerido como Resposta Francisco Carlos Massarotti quinta-feira, 3 de novembro de 2011 17:23
-
-
Boa Noite , Deis de Ja agradeço o Tech_Tom por ter nos deixado este script
Franscisco para que apareça o script é preciso cria lo, para criar ele basta no seu outlook apertar Alt + F11
Aparecera uma tela nesta tela você ira Clicar em cima da palavra Projeto1 Com botao direito do Mouse
Aperte Inserir Modulo
Ira aparecer uma tela em branco!
cole isto la
Public Sub ProcessarAnexo(Email As MailItem) Dim DiretorioAnexos As String DiretorioAnexos = "colocar aqui a pasta destino. pode ser local em rede também EXEMPLO C:\NOVAPASTA" Dim MailID As String Dim Mail As Outlook.MailItem MailID = Email.EntryID Set Mail = Application.Session.GetItemFromID(MailID) For Each Anexo In Mail.Attachments If Right(Anexo.FileName, 3) = "xml" Then MsgBox (Anexo.FileName) Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName End If Next Set Mail = Nothing End Sub
Após isto Feche e crie uma regra e selecione script , clique em cima do script e selecione módulo1 e pronto, termine a regra e execute a.
- Editado Fábio JrModerator quinta-feira, 30 de agosto de 2012 12:26 Formatação do Código
-
Bom dia,
Foi muito util o codigo fornecido pelo Tech_Tom, porem identifiquei um probleminha e segue o corrigido:
Public Sub ProcessarAnexo(Email As MailItem)
Dim DiretorioAnexos As String
DiretorioAnexos = "C:\NFE"
Dim MailID As String
Dim Mail As Outlook.MailItem
MailID = Email.EntryID
Set Mail = Application.Session.GetItemFromID(MailID)
For Each Anexo In Mail.Attachments
If Right(Anexo.FileName, 3) = "xml" Then
MsgBox (Anexo.FileName)
Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName
End If
Next
Set Mail = Nothing
End Sub
No caminho do arquivo, se colocarmos o c:\nfe\ ele da erro e nao aceita gravar.
portanto deve-se colocar c:\nfe e o \ eu coloquei ao salvar o arquivo, nesse linha:
Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName
Mesmo assim, obrigado pelo codigo foi de muita ajuda aqui na empresa onde trabalho.
Marcos Aurelio Analista de Suporte
- Sugerido como Resposta Marcos Aurélio quinta-feira, 8 de novembro de 2012 11:01
-
Bom dia,
Foi muito util o codigo fornecido pelo Tech_Tom, porem identifiquei um probleminha e segue o corrigido:
Public Sub ProcessarAnexo(Email As MailItem)
Dim DiretorioAnexos As String
DiretorioAnexos = "C:\NFE"
Dim MailID As String
Dim Mail As Outlook.MailItem
MailID = Email.EntryID
Set Mail = Application.Session.GetItemFromID(MailID)
For Each Anexo In Mail.Attachments
If Right(Anexo.FileName, 3) = "xml" Then
MsgBox (Anexo.FileName)
Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName
End If
Next
Set Mail = Nothing
End Sub
No caminho do arquivo, se colocarmos o c:\nfe\ ele da erro e nao aceita gravar.
portanto deve-se colocar c:\nfe e o \ eu coloquei ao salvar o arquivo, nesse linha:
Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName
Mesmo assim, obrigado pelo codigo foi de muita ajuda aqui na empresa onde trabalho.
Marcos Aurelio Analista de Suporte
Boa tarde,
Pessoal rodo tudo certinho aqui na versão 2007, porem ele pede uma confirmação para salvar o arquivo é possível tirar isso?
-
Ola pessoal
ja usei esse script no outlook 2007 e funcionou perfeitamente, porem hoje preciso usar esse script no outlook 2010
eu tentei mas nao deu certo nao salva o anexo
e para testes dei um msgbox e mesmo assim nao apareceu nenhuma mensagem
testei a regra e criei para mover a mensagem de pastas e funcionou, pelo que percebi só nao esta funcionando a parte do script
alguem sabe se no 2010 muda alguma coisa?
Grato
-
Fabyo,
Sugiro que procure ajuda no fórum do Outlook, o problema parece ser configuração do outlook, deve haver algum lugar que libere execução de scripts.
Fábio de Paula Junior
- Sugerido como Resposta Fabyo Guimaraes terça-feira, 4 de dezembro de 2012 09:43
-
-
Pessoal,
Bom dia!
O script está funcionando 100%, porém ele só salva o arquivo quando clicamos em OK na janela que aparece!
Tem como colocar no código alguma opção para que ele já salve automaticamente? Sem precisar de clicar em nada?
Desde já obrigado.
Gedaías Brandão
-
Ola apenas exclua a linha MsgBox(Anexo.FileName) testado com sucesso este comando que envia mensagem ao receber arquivo automatico
Public Sub ProcessarAnexo(Email As MailItem)
Dim DiretorioAnexos As String
DiretorioAnexos = "C:\NFE"
Dim MailID As String
Dim Mail As Outlook.MailItem
MailID = Email.EntryID
Set Mail = Application.Session.GetItemFromID(MailID)
For Each Anexo In Mail.Attachments
If Right(Anexo.FileName, 3) = "xml" Then
Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName
End If
Next
Set Mail = Nothing
End Sub -
-
-
Fernando,
Aqui vc consegue ajuda sobre codificação, seria melhor (e mais rápido) vc postar sua dúvida no fórum de VBA ou de Office.
http://social.msdn.microsoft.com/Forums/pt-br/vbapt/threads
Fábio de Paula Junior
-
bom dia,
Eu recebo muito e-mail com anexo XML e não consigo salva-lo para enviar ao setor contábil.
Tentei seguir esse passo a passo acima, mas não deu certo, o que eu percebi é que os anexo vem todos com mesmo nome e isso não esta permitindo salvar como novos arquivos.
Se algum poder me ajudar agradeço imensamente.
Att,
Palmira Ap.
-
-
-
-
desse script abaixo algo necessita ser alterado para rodar no OUTLOOK 2016 - pois estava funcionando do 2013 e parou de rodar.
Public Sub ProcessarAnexo(Email As MailItem)
Dim DiretorioAnexos As String
DiretorioAnexos = "C:\NFE"
Dim MailID As String
Dim Mail As Outlook.MailItem
MailID = Email.EntryID
Set Mail = Application.Session.GetItemFromID(MailID)
For Each Anexo In Mail.Attachments
If Right(Anexo.FileName, 3) = "xml" Then
Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName
End If
Next
Set Mail = Nothing
End Sub- Editado MiguelAmarante quarta-feira, 14 de outubro de 2015 19:26
-
Olá bom dia, esse post já tem tanto tempo e ainda é muito útil :). Segui os passos acima para criação da Macro, mas não consegui criar uma regra e selecionar script.
Como faço para criar uma regra e selecionar o script que foi feito.
Desde já gradeço.
Abçs
Ronaldo Miguel
-
-
-
Pessoal,
eu peguei neste fórum o script para salvar anexo do outlook em xml em uma determinada pasta. Depois que instalei o script e fiz as configurações de regras e alertas ele funcionou perfeitamente. No entanto, depois de algumas horas ele para de executar script, e nem se eu realizar a execução de regras e alertas manualmente ele salva o xml na pasta.
Fiz este procedimento no outlook 2007 e também no outlook 2013 e todos apresentaram o mesmo problema.
Alguém sabe como resolvo este problema?
Public Sub ProcessarAnexo(Email As MailItem) Dim DiretorioAnexos As String DiretorioAnexos = "C:\Documents and Settings\Vinicius\Meus documentos\TESTE NFE" Dim MailID As String Dim Mail As Outlook.MailItem MailID = Email.EntryID Set Mail = Application.Session.GetItemFromID(MailID) For Each Anexo In Mail.Attachments If Right(Anexo.FileName, 3) = "xml" Then MsgBox (Anexo.FileName) Anexo.SaveAsFile DiretorioAnexos & "\" & Anexo.FileName End If Next Set Mail = Nothing End Sub
-
-
-
Olá, boa tarde! Você já conseguiu fazer funcionar? Estou com o mesmo problema no office 2016.
Muito obrigado.
Jaison Benvenutti
- Editado Jaison Benvenutti terça-feira, 25 de outubro de 2016 17:37
-
-
Olá.
Este código que aperfeiçoei com base em vários modelos que encontrei na internet. Ele renomeia e salva os XML das notas em três pastas uma para as CTe, uma para as NFe e uma para as NFCe.
Espero que seja útil para mais alguém.
Public Sub ProcessarAnexo(Email As Outlook.MailItem) Dim DiretorioAnexos As String DiretorioAnexos = "X:\NOTAS\" Dim MailID As String Dim Mail As Outlook.MailItem Dim Anexo As Outlook.Attachment Dim FSO As Object MailID = Email.EntryID Set Mail = Application.Session.GetItemFromID(MailID) For Each Anexo In Mail.Attachments If Right(Anexo.FileName, 4) = ".xml" Or Right(Anexo.FileName, 4) = ".XML" Then Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName Set objParser = CreateObject("Microsoft.XMLDOM") objParser.Load (DiretorioAnexos + Anexo.FileName) oldFileName = DiretorioAnexos + Anexo.FileName If (objParser.getElementsByTagName("mod").Length = 1) Then Set ElemList = objParser.getElementsByTagName("mod") ver = ElemList.Item(0).text ElseIf (objParser.getElementsByTagName("procEventoNFe").Length = 1) Then newFileName = DiretorioAnexos & "NFe\" & Anexo.FileName ElseIf (objParser.getElementsByTagName("procEventoCTe").Length = 1) Then newFileName = DiretorioAnexos & "CTe\" & Anexo.FileName Else newFileName = DiretorioAnexos & Anexo.FileName GoTo Fim End If If ver = "55" Then Set ElemList = objParser.getElementsByTagName("nNF") nNF = Format(ElemList.Item(0).text, "000000") Set ElemList = objParser.getElementsByTagName("chNFe") chNFe = ElemList.Item(0).text Set ElemList = objParser.getElementsByTagName("dhEmi") dhEmi = ElemList.Item(0).text dhEmi = Replace(dhEmi, ":", "-") dhEmi = Left(dhEmi, 19) Set ElemList = objParser.getElementsByTagName("xNome") xNome = ElemList.Item(0).text xNome = Special_Characters((xNome)) xNome = Left(xNome, 20) newFileName = DiretorioAnexos & "NFe\" & dhEmi + "_" + nNF + "_" + xNome + "_" + chNFe + ".xml" ElseIf ver = "65" Then Set ElemList = objParser.getElementsByTagName("nNF") nNF = Format(ElemList.Item(0).text, "000000") Set ElemList = objParser.getElementsByTagName("chNFe") chNFe = ElemList.Item(0).text Set ElemList = objParser.getElementsByTagName("dhEmi") dhEmi = ElemList.Item(0).text dhEmi = Replace(dhEmi, ":", "-") dhEmi = Left(dhEmi, 19) Set ElemList = objParser.getElementsByTagName("xNome") xNome = ElemList.Item(0).text xNome = Special_Characters((xNome)) xNome = Left(xNome, 20) newFileName = DiretorioAnexos & "NFCe\" & dhEmi + "_" + nNF + "_" + xNome + "_" + chNFe + ".xml" ElseIf ver = "57" Then Set ElemList = objParser.getElementsByTagName("nCT") nCT = Format(ElemList.Item(0).text, "000000") If (objParser.getElementsByTagName("chCT").Length = 1) Then Set ElemList = objParser.getElementsByTagName("chCT") chCT = ElemList.Item(0).text Else Set ElemList = objParser.getElementsByTagName("chCTe") chCT = ElemList.Item(0).text End If Set ElemList = objParser.getElementsByTagName("dhEmi") dhEmi = ElemList.Item(0).text dhEmi = Replace(dhEmi, ":", "-") dhEmi = Left(dhEmi, 19) Set ElemList = objParser.getElementsByTagName("xNome") xNome = ElemList.Item(0).text xNome = Special_Characters((xNome)) xNome = Left(xNome, 20) newFileName = DiretorioAnexos & "CTe\" & dhEmi + "_" + nCT + "_" + xNome + "_" + chCT + ".xml" Else newFileName = DiretorioAnexos & Anexo.FileName End If Fim: Set FSO = CreateObject("Scripting.FileSystemObject") If FSO.FileExists(newFileName) = False Then FSO.MoveFile oldFileName, newFileName Else FSO.DeleteFile oldFileName, True End If End If Next Set Mail = Nothing End Sub Function Special_Characters(TESTVALUE As String) Dim changename As String Dim SP As String Dim SP_C() As String changename = TESTVALUE SP = "! @ # $ % ^ & * * ( ) _ + = - \ | ] } [ { ' : / ? > . < , ; " SP_C = Split(SP, " ") For I = o To UBound(SP_C) CHAR = SP_C(I) changename = Replace(changename, CHAR, "") Next Special_Characters = changename End Function
- Sugerido como Resposta SantosRenanR sexta-feira, 2 de junho de 2017 23:06
- Editado SantosRenanR sexta-feira, 16 de fevereiro de 2018 01:53 Verção 2.0 do codigo
-
Olá.
Este código que aperfeiçoei com base em vários modelos que encontrei na internet. Ele renomeia e salva os XML das notas duas pastas uma para as CTe e uma para as NFe.
Espero que seja útil para mais alguém.
Public Sub ProcessarAnexo(Email As MailItem) Dim DiretorioAnexos As String DiretorioAnexos = "X:\NOTAS\" Dim MailID As String Dim Mail As Outlook.MailItem Dim fso MailID = Email.EntryID Set Mail = Application.Session.GetItemFromID(MailID) For Each Anexo In Mail.Attachments If Right(Anexo.FileName, 4) = ".xml" Or Right(Anexo.FileName, 4) = ".XML" Then Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName Set objParser = CreateObject("Microsoft.XMLDOM") objParser.Load (DiretorioAnexos + Anexo.FileName) oldFileName = DiretorioAnexos + Anexo.FileName If (objParser.getElementsByTagName("NFe").Length = 1) Then Set ElemList = objParser.getElementsByTagName("nNF") nNF = Format(ElemList.Item(0).Text, "000000") Set ElemList = objParser.getElementsByTagName("chNFe") chNFe = ElemList.Item(0).Text Set ElemList = objParser.getElementsByTagName("dhEmi") dhEmi = ElemList.Item(0).Text dhEmi = Replace(dhEmi, ":", "-") dhEmi = Left(dhEmi, 19) Set ElemList = objParser.getElementsByTagName("xNome") xNome = ElemList.Item(0).Text xNome = Replace(xNome, " ", "_") xNome = Left(xNome, 20) newFileName = DiretorioAnexos & "NFe\" & dhEmi + "_" + nNF + "_" + xNome + "_" + chNFe + ".xml" End If If (objParser.getElementsByTagName("procEventoNFe").Length = 1) Then newFileName = DiretorioAnexos & "NFe\" & Anexo.FileName End If If (objParser.getElementsByTagName("NFe").Length = 1) Then newFileName = DiretorioAnexos & "NFe\" & Anexo.FileName End If If (objParser.getElementsByTagName("CTe").Length = 1) Then Set ElemList = objParser.getElementsByTagName("nCT") nCT = Format(ElemList.Item(0).Text, "000000") If (objParser.getElementsByTagName("chCT").Length = 1) Then Set ElemList = objParser.getElementsByTagName("chCT") chCT = ElemList.Item(0).Text Else Set ElemList = objParser.getElementsByTagName("chCTe") chCT = ElemList.Item(0).Text End If Set ElemList = objParser.getElementsByTagName("dhEmi") dhEmi = ElemList.Item(0).Text dhEmi = Replace(dhEmi, ":", "-") dhEmi = Left(dhEmi, 19) Set ElemList = objParser.getElementsByTagName("xNome") xNome = ElemList.Item(0).Text xNome = Replace(xNome, " ", "_") xNome = Left(xNome, 20) newFileName = DiretorioAnexos & "CTe\" & dhEmi + "_" + nCT + "_" + xNome + "_" + chCT + ".xml" End If If (objParser.getElementsByTagName("procEventoCTe").Length = 1) Then newFileName = DiretorioAnexos & "CTe\" & Anexo.FileName End If If (objParser.getElementsByTagName("CTe").Length = 1) Then newFileName = DiretorioAnexos & "CTe\" & Anexo.FileName End If Set fso = CreateObject("Scripting.FileSystemObject") fso.MoveFile oldFileName, newFileName End If Next Set Mail = Nothing End Sub
Boa tarde,
Uso o outlook 2010 e não consigo criar essa macro, alguem poderia me ensinar o passo a passo? eu tenho uma base no excel somente
-
-
-
-
-
Com relação a criação de macros, poderiam me ajudar com as seguintes dúvidas:
1. Gostaria de um script para encaminhar todos os e-mails recebidos pelo outlook para uma pasta específica.
2. Distribuir esses e-mail salvos em uma pasta em diversas outras pastas, determinado pelo assunto do e-mail ou pelo conteúdo (um número de série por exemplo).
Alguma dica?