none
VBA Outlook RRS feed

  • Pergunta

  • Galera, preciso que alguém (mais experiente que eu) analise o meu código VBA para Outlook, 

    Preciso que o código analise se o email tiver arquivos .xml e salve automático em uma pasta, até ai tudo bem, consegui fazer sem problemas, porem preciso também que ele pegue o numero da chave do xml e renomeie para tal chave, esse eu não estou conseguindo fazer.

    Segue o código:

    Public Sub Teste(Email As MailItem)
        Dim DiretorioAnexos As String
        DiretorioAnexos = "C:\"
        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" Then
               Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName
               Set objParser = CreateObject("Microsoft.XMLDOM")
                objParser.Load (DiretorioAnexos + Anexo.FileName)

                Set ElemList = objParser.getElementsByTagName("chNFe")
                'FilePath = ElemList.Item(0).getAttribute("filepath")

                oldFileName = DiretorioAnexos + Anexo.FileName

                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("xNome")
               ' xNome = ElemList.Item(0).Text

                newFileName = DiretorioAnexos + nNF + "_" + xNome + "_" + chNFe + ".xml"

                Set fso = CreateObject("Scripting.FileSystemObject")
                fso.MoveFile oldFileName, newFileName
            End If
        Next

        Set Mail = Nothing
    End Sub

    quarta-feira, 30 de outubro de 2013 09:46

Respostas

  • Experimente renomear o arquivo de uma forma diferente. Substitua:

    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.MoveFile oldFileName, newFileName

    por

    Name oldFileName As newFileName


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 28 de novembro de 2013 23:00
    Moderador
  • Preciso que o código renomeie o XML que vier via email, para [numero da nota] + [numero da chave].xml

    Na prática, deve funcionar para qualquer XML.

    Public Sub Teste(Email As MailItem)
        Dim DiretorioAnexos As String
        DiretorioAnexos = "C:\"
        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" Then
               Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName
               Set objParser = CreateObject("Microsoft.XMLDOM")
                objParser.Load (DiretorioAnexos + Anexo.FileName)
    
                Set ElemList = objParser.getElementsByTagName("chNFe")
                FilePath = ElemList.Item(0).getAttribute("filepath")
    
                oldFileName = DiretorioAnexos + Anexo.FileName
    
                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("xNome")
               xNome = ElemList.Item(0).Text
    
                newFileName = DiretorioAnexos + nNF + "_" + xNome + "_" + chNFe + ".xml"
    
                Set fso = CreateObject("Scripting.FileSystemObject")
                fso.MoveFile oldFileName, newFileName
            End If
        Next
    
        Set Mail = Nothing
    End Sub

    terça-feira, 12 de novembro de 2013 10:23

Todas as Respostas

  • Ao inserir um código no fórum, utilize blocos de código. Para utilizar essa ferramenta, clique no botão cuja legenda é “Inserir bloco de código” na barra do editor de mensagens do fórum.

    ---

    Sobre sua dúvida, seria melhor se você nos disponibilizasse para download um XML como exemplo e falasse qual nó deve ser alterado.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 30 de outubro de 2013 21:51
    Moderador
  • Preciso que o código renomeie o XML que vier via email, para [numero da nota] + [numero da chave].xml

    Na prática, deve funcionar para qualquer XML.

    Public Sub Teste(Email As MailItem)
        Dim DiretorioAnexos As String
        DiretorioAnexos = "C:\"
        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" Then
               Anexo.SaveAsFile DiretorioAnexos & Anexo.FileName
               Set objParser = CreateObject("Microsoft.XMLDOM")
                objParser.Load (DiretorioAnexos + Anexo.FileName)
    
                Set ElemList = objParser.getElementsByTagName("chNFe")
                FilePath = ElemList.Item(0).getAttribute("filepath")
    
                oldFileName = DiretorioAnexos + Anexo.FileName
    
                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("xNome")
               xNome = ElemList.Item(0).Text
    
                newFileName = DiretorioAnexos + nNF + "_" + xNome + "_" + chNFe + ".xml"
    
                Set fso = CreateObject("Scripting.FileSystemObject")
                fso.MoveFile oldFileName, newFileName
            End If
        Next
    
        Set Mail = Nothing
    End Sub

    terça-feira, 12 de novembro de 2013 10:23
  • Onde se encontra o número da chave? Dentro do arquivo XML? Se sim, é por isso que preciso de um arquivo XML, para saber como vou extrair a informação do arquivo.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quarta-feira, 20 de novembro de 2013 18:55
    Moderador
  • Então Felipe, 

    Ele deve buscar o numero da chave dentro do próprio arquivo XML, no campo

    <chNFe>41131179846820000230550040000029491008226314</chNFe>

    Estou anexando um XML, que contem essa mesma chave.

    XML para Teste

    Obrigado..

    OBS:. A parte do download ele faz, mas a alteração do nome não.

    sexta-feira, 22 de novembro de 2013 20:20
  • Bom, o seu código parece estar certo. Você está obtendo um erro em tempo de execução ou a macro não faz nada? Tem certeza que a macro está rodando?

    Está explícito no código a parte em que é obitdo o número da chave do arquivo XML e também o método de mover o arquivo com um novo nome que comtempla o novo valor da chave.


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 26 de novembro de 2013 00:12
    Moderador
  • Então, ele não apresenta nenhum erro, porém, unica coisa que o código esta fazendo é baixar o XML com o nome que mandam no e-mail, tipo ele não chega a renomear, e dependendo do XML ele nem consegue salvar automático.

    Tenho certeza sim que ela esta rodando, pois as vezes ele salva (com o nome original do e-mail).

    quinta-feira, 28 de novembro de 2013 09:43
  • Experimente renomear o arquivo de uma forma diferente. Substitua:

    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.MoveFile oldFileName, newFileName

    por

    Name oldFileName As newFileName


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 28 de novembro de 2013 23:00
    Moderador
  • Felipe, cara muito obrigado, deu certo, funcionou perfeitamente..


    • Editado Dalvan Simon segunda-feira, 9 de dezembro de 2013 09:32
    sexta-feira, 29 de novembro de 2013 12:28