none
VBA não executa .bat com permissão de acesso ao FTP (Windows 7 x64) RRS feed

  • Pergunta

  • Caros,

    Estou com um grande problema ao automatizar alguns processos de relatórios.

    Quando executo um batch ele procede normalmente até o fim, mas ao executar em uma macro (VBA) do Access ele trava e não continua a execução.

    Consigo executar normalmente de outras máquinas, mas a minha em específico é Windows 7 x64 e não executa, as demais são x86.

    Ao dar dois cliques no batch ele executa normalmente. Aparentemente é um problema relacionado ao acesso da execução via shell (processo chamado).

    Ele para a execução na linha 5: "mget EXTRACOES/REGIONALA/arquivoA_08062016*"


    Shell:

    Shell ("C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\files_config\arquivoD1.bat"), vbNormalFocus

    __________________________________________________________________________

    Linha de comando:

    ftp -s:"C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\files_config\arquivoD1.txt" 0.00.0.000

    __________________________________________________________________________

    Arquivo txt a ser executado:

    dominio/meuUsuario
    M1nhaS3nha
    lcd "C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\ftp_files_lists"
    prompt off
    mget EXTRACOES/REGIONALA/arquivoA_08062016*
    mget EXTRACOES/REGIONALB/arquivoA_08062016*
    mget EXTRACOES/REGIONALC/arquivoA_08062016*
    mget EXTRACOES/REGIONALD/arquivoA_08062016*
    mget EXTRACOES/REGIONALE/arquivoA_08062016*
    mget EXTRACOES/REGIONALF/arquivoA_08062016*
    mget EXTRACOES/REGIONALG/arquivoA_08062016*
    mget EXTRACOES/REGIONALA/arquivoB_08062016*
    mget EXTRACOES/REGIONALB/arquivoB_08062016*
    mget EXTRACOES/REGIONALC/arquivoB_08062016*
    mget EXTRACOES/REGIONALD/arquivoB_08062016*
    mget EXTRACOES/REGIONALE/arquivoB_08062016*
    mget EXTRACOES/REGIONALF/arquivoB_08062016*
    mget EXTRACOES/REGIONALG/arquivoB_08062016*
    quit

    ___________________________________________________________________________

    Alguém tem alguma solução prática para isso? Ou algo que possa fazer para verificar as permissões de acessos e corrigir o problema?



    • Editado Alex A Bueno sexta-feira, 10 de junho de 2016 11:06
    quinta-feira, 9 de junho de 2016 19:42

Todas as Respostas

  • Você notou que escreveu o caminho do BAT da instrução Shell sem aspas duplas?

    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    sexta-feira, 10 de junho de 2016 00:58
    Moderador
  • Sim amigo, esse parâmetro eu passo com uma variável String, ele executa normalmente em outras maquinas, mas na minha não.

    Vou editar no post, obrigado.

    sexta-feira, 10 de junho de 2016 11:05
  • Infelizmente ao rodar um bat você não consegue capturar a descrição do erro, você consegue detectar somente se aconteceu um erro e fazer um genérico tratamento.

    Veja as referências abaixo:

    1. http://stackoverflow.com/questions/31445330/does-windows-batch-support-exception-handling
    2. http://www.codeproject.com/Questions/779412/How-to-use-try-catch-blocks-in-cmd-or-batch-files

    Sugestão

    Isolar o problema

    Monte uma aplicação console em VB.NET para simular o comando "mget" considerando o bloco tray catch para a captura da exceção.

    Uma vez que o tratamento com bat dificulta o tratamento de exceção, considero importante um esforço para migrar a solução de *.bat para um console application (C# ou VB) - ressaltando que a versão express do visual studio é gratuita e possibilita a criação desse tipo de solução. Com ela você poderá de maneira simplificada tratar erros com log e alertas por e-mail com a coleta da descrição do erro como o próprio stack trace, mensagem, etc.

    sexta-feira, 10 de junho de 2016 12:56
  • Bom, não sei ao certo o que pode estar causando isso. O que sei é que a instrução Shell funciona normalmente no Office 32 e 64 bits.

    Algumas hipóteses:

    1 - O caminho "C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\ftp_files_lists" não existe na sua máquina.

    2 - Existe o caminho "C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\ftp_files_lists", mas não existe as subpastas "EXTRACOES/REGIONALA" dentro dele.

    3 - Estou estranhando usar / ao invés de \. Já experimentou trocar e deixar tudo \ nas separações?

    4 - O arquivo executável MGET não funciona em plataformas 64 bits do Windows.



    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    sexta-feira, 10 de junho de 2016 12:58
    Moderador
  • Concordo com você Felipe, por isso eu sugeri que Alex isolasse o problema numa aplicação console para captar o erro. Certamente uma de suas hipóteses serão comprovadas ou algum erro transparente.
    sexta-feira, 10 de junho de 2016 17:33
  • Felipe,

    Desde já agradeço a atenção.

    O bat funciona normalmente quando eu executo, simplesmente clicando duas vezes no arquivo, bem normal, porém quando eu executo via o comando Shell do vba ele não roda, nem mesmo quando deixo ele no Scheduler, ele trava no MGET até que expire o tempo.

    Dá-se um problema que acredito ser devido a permissão de acesso a execução ou algum permissionamento de meu usuário, porém nos sistemas x86 ele executa normalmente, descartando o permissionamento do meu usuário.

    Gostaria de resolver o problema tendo em vista que pode ter mais usuários com o mesmo problema, para mim seria também de grande ajuda.

    segunda-feira, 20 de junho de 2016 11:33
  • Gilberto,

    Concordo que devo alterar os métodos da aplicação, assim que possível vou migrar para outro método.

    O que acho muito estranho é que a aplicação não apresenta erro executando pelo clique, mas sim somente pelo Shell.

    Obrigado pela atenção.

    segunda-feira, 20 de junho de 2016 11:57
  • Uma última sugestão: tente acessar a chamar Shell usando uma API do Windows:

    Option Explicit
    
    Private Const SW_SHOWMAXIMIZED = 3
    
    #If VBA7 Then
        Private Declare PtrSafe Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" ( _
                                         ByVal hwnd As LongPtr, _
                                         ByVal lpOperation As String, _
                                         ByVal lpFile As String, _
                                         ByVal lpParameters As String, _
                                         ByVal lpDirectory As String, _
                                         ByVal nShowCmd As LongPtr) As LongPtr
    #Else
        Private Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" ( _
                                 ByVal hwnd As Long, _
                                 ByVal lpOperation As String, _
                                 ByVal lpFile As String, _
                                 ByVal lpParameters As String, _
                                 ByVal lpDirectory As String, _
                                 ByVal nShowCmd As Long) As Long
    #End If
    
    Sub Main()
        ShellExecute hwnd:=Application.hwnd, _
                     lpOperation:="open", _
                     lpFile:="C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\files_config\arquivoD1.bat", _
                     lpParameters:=vbNullString, _
                     lpDirectory:=Environ("SystemDrive"), _
                     nShowCmd:=SW_SHOWMAXIMIZED
    End Sub
    
    
    


    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    segunda-feira, 20 de junho de 2016 12:48
    Moderador
  • Felipe,

    Tentei executar essa solução, porém não executou o código.

    Ele exibe a seguinte mensagem de erro:

    "Erro de compilação: Método ou membro de dados não encontrado"

    Preciso habilitar no VBA alguma biblioteca/ referencia específica?

    Obrigado.

    quarta-feira, 29 de junho de 2016 12:29
  • Era para funcionar. O que fica sublinhado quando você tenta compilar seu código?

    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 29 de junho de 2016 12:50
    Moderador
  • No código fica sublinhado o ".hwnd" e descrimina o erro informado.

    Sub main()
        ShellExecute hwnd:=Application.hwnd, _
          lpOperation:="open", _
          lpFile:="C:\Users\meuUsuario\Documents\pastaDeRelatorio\Extrator FTP\files_config\arquivoD1.bat", _
          lpParameters:=vbNullString, _
          lpDirectory:=Environ("SystemDrive"), _
          nShowCmd:=SW_SHOWMAXIMIZED
    End Sub

    quarta-feira, 29 de junho de 2016 13:00
  • Troque Application.hwnd por 0

    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    quarta-feira, 29 de junho de 2016 13:21
    Moderador
  • Felipe boa tarde,

    Executei e o mesmo comportamento aconteceu, não executou.

    Obrigado,

    sexta-feira, 1 de julho de 2016 16:34
  • Ou seja, seu código ainda não compila?

    http://www.ambienteoffice.com.br - http://www.clarian.com.br

    sexta-feira, 1 de julho de 2016 17:22
    Moderador
  • Olá Alex,

    Tudo em Access, veja se ajuda.

    http://www.maximoaccess.com/t2053-interacao-ms-access-com-ftp

    Abraço a todos

    domingo, 10 de julho de 2016 15:26
  • Tudo bem Alex? Vc descobriu uma forma de contornar este problema? Estou com a mesma dificuldade.
    domingo, 3 de abril de 2022 16:04