none
Salvar anexos com mesmo nome RRS feed

  • Pergunta

  • Boa tarde.

    Preciso de uma ajuda para o script de salvar anexos em uma pasta.

    O script funciona corretamente, porém todos os meus anexos possuem o mesmo nome na extensão csv.

    Tentei criar um contador no nome do arquivo, porém mesmo assim não funciona.

    Como posso resolver a questão?

    Public Sub ProcessarCarport(Email As MailItem)
         Dim DiretorioAnexos As String
         
         DiretorioAnexos = "D:\Trabalho Danilo\Campanhas\Macro\CARPORT\"
         
         Dim MailID As String
         Dim Mail As Outlook.MailItem
         Dim Nome As String
         
         
         MailID = Email.EntryID
         Set Mail = Application.Session.GetItemFromID(MailID)
         
         count = 1
             
         For Each Anexo In Mail.Attachments
         
                Arquivo = Left(Anexo.FileName, Len(Anexo.FileName) - 3) & count & ".csv"
    
                 Anexo.SaveAsFile DiretorioAnexos & Arquivo
                 count = count + 1
                         
         Next
         
         Set Mail = Nothing
         count = 1
    End Sub

    terça-feira, 31 de maio de 2016 19:14

Todas as Respostas

  • Teste da seguinte maneira:

    Public Sub ProcessarCarport(Email As MailItem)
         Dim DiretorioAnexos As String
         
         DiretorioAnexos = "D:\Trabalho Danilo\Campanhas\Macro\CARPORT\"
         
         Dim MailID As String
         Dim Mail As Outlook.MailItem
         Dim Nome As String
         Dim count As Integer
         
         
         MailID = Email.EntryID
         Set Mail = Application.Session.GetItemFromID(MailID)
         
         count = 1
             
         For Each Anexo In Mail.Attachments
         
                Arquivo = Left(Anexo.FileName, Len(Anexo.FileName) - 3) & count & ".csv"
    
                 Anexo.SaveAsFile DiretorioAnexos & Arquivo
                 count = count + 1
                         
         Next
         
         Set Mail = Nothing
    
    End Sub

    terça-feira, 31 de maio de 2016 22:48
  • Teste da seguinte maneira:

    Public Sub ProcessarCarport(Email As MailItem)
         Dim DiretorioAnexos As String
         
         DiretorioAnexos = "D:\Trabalho Danilo\Campanhas\Macro\CARPORT\"
         
         Dim MailID As String
         Dim Mail As Outlook.MailItem
         Dim Nome As String
         Dim count As Integer
         
         
         MailID = Email.EntryID
         Set Mail = Application.Session.GetItemFromID(MailID)
         
         count = 1
             
         For Each Anexo In Mail.Attachments
         
                Arquivo = Left(Anexo.FileName, Len(Anexo.FileName) - 3) & count & ".csv"
    
                 Anexo.SaveAsFile DiretorioAnexos & Arquivo
                 count = count + 1
                         
         Next
         
         Set Mail = Nothing
    
    End Sub

    Andre,

    obrigado, porém não funcionou.

    Percebi que você incluiu a declaração da variável count. Era só isso mesmo?

    quarta-feira, 1 de junho de 2016 13:50
  • Ok, como está ficando os nomes de saída dos arquivos?
    quarta-feira, 1 de junho de 2016 19:23
  • Ok, como está ficando os nomes de saída dos arquivos?

    Andre,

    o nome do anexo original no e-mail é AB1FZG.TXT. todos os e-mails possuem um arquivo anexo com este mesmo nome.

    Ao rodar o script, ele salva apenas 1 anexo com o nome AB1FZG.CSV.

    Eu coloquei CSV, pois uso o excel para editar o arquivo.

    quarta-feira, 1 de junho de 2016 19:55
  • Faça um novo teste alterando a linha abaixo:

    Arquivo = Left(Anexo.FileName, Len(Anexo.FileName) - 3) & CStr(count) & ".csv"

    segunda-feira, 6 de junho de 2016 01:48
  • André,

    não deu certo, ele criou apenas um arquivo com o nome AB1FZG.1.CSV

    terça-feira, 7 de junho de 2016 17:16
  • Você postou o código do script completo?

    Você recebe apenas um anexo por e-mail? Neste caso o loop está incorreto.

    Preciso do código completo.

    quarta-feira, 8 de junho de 2016 14:56
  • Andre, segue novamente o script completo.

    Cada e-mail tem apenas 1 anexo.

    Todos os e-mails possuem o anexo com o mesmo nome.

    Public Sub ProcessarCarport(Email As MailItem)
         Dim DiretorioAnexos As String
         
         DiretorioAnexos = "D:\Trabalho Danilo\Campanhas\Macro\CARPORT\"
         
         Dim MailID As String
         Dim Mail As Outlook.MailItem
         Dim Nome As String
         Dim count As Integer
         
         
         MailID = Email.EntryID
         Set Mail = Application.Session.GetItemFromID(MailID)
         
         count = 1
         
      
               
         For Each Anexo In Mail.Attachments
         
              
                Arquivo = Left(Anexo.FileName, Len(Anexo.FileName) - 3) & CStr(count) & ".csv"
    
                 Anexo.SaveAsFile DiretorioAnexos & Arquivo
                 
                                      
         Next
         
              
         Set Mail = Nothing
         
        
    
    End Sub
    

    quarta-feira, 8 de junho de 2016 18:52
  • A variável count é iniciado com 1 todas as vezes que um e-mail diferente é lido e por isto sempre resulta em 1.

    Você precisa encontrar outro meio de trabalhar este valor, exemplo, se você roda o script para ler todos os e-mails em uma única execução, a variável count deve ser declarada fora da sub ProcessarCarport.

    A estrutura deveria ser:

    1. Declarar count

    2. Função para ler todos os e-mails em um loop e chamar função 3 para cada e-mail (ProcessarCarport)

    3. Função para salvar os anexos (ProcessarCarport e count deve ser incrementado nela)

    domingo, 12 de junho de 2016 01:27
  • Andre,

    desculpe a demora, estava ausente.

    Não tenho muita familiaridade em escrever este codigo, poderia me ajudar?

    Obrigado.

    sexta-feira, 15 de julho de 2016 19:45