Como Executar Script Python Externo a Partir do VBA do Word
🔍 WiseChecker

Como Executar Script Python Externo a Partir do VBA do Word

Você quer chamar um script Python diretamente do Word usando VBA. Isso é útil quando você precisa processar dados, gerar relatórios ou interagir com sistemas externos que o VBA não consegue manipular sozinho. O VBA do Word pode iniciar qualquer executável externo, incluindo o interpretador Python, usando a função Shell ou o objeto Windows Script Host. Este artigo explica como configurar o código VBA para executar um script Python externo, passar argumentos e aguardar a conclusão do script antes de continuar.

Principais Conclusões: Executando Scripts Python a Partir do VBA do Word

  • Função Shell com caminho do python.exe: Inicia o interpretador Python em uma janela separada.
  • Método WshShell.Run com waitOnReturn:=True: Executa o script de forma síncrona e aguarda a conclusão.
  • Passagem de argumentos via string de linha de comando: Envia caminhos de arquivos ou parâmetros para o script Python.

ADVERTISEMENT

Como o VBA do Word se Comunica com Programas Externos

O VBA do Word não possui integração nativa com Python. Para executar um script Python, o VBA usa o sistema operacional Windows para iniciar um novo processo. Os dois métodos principais são a função Shell do VBA e o objeto Windows Script Host (WshShell). Ambos os métodos chamam o interpretador Python (python.exe) e fornecem o caminho do arquivo de script como argumento.

A função Shell inicia o processo de forma assíncrona por padrão. Isso significa que o VBA continua executando a próxima linha de código antes que o script Python termine. Se sua macro do Word depender da saída do script, você deve usar um método síncrono, como WshShell.Run com o parâmetro waitOnReturn definido como True.

Você também precisa do caminho completo para python.exe e do caminho completo para seu arquivo .py. O Python deve estar instalado na mesma máquina. Se o Python não estiver no PATH do sistema, você deve fornecer o caminho completo do executável.

Métodos para Executar um Script Python a Partir do VBA do Word

Método 1: Usando a Função Shell do VBA

A função Shell é a maneira mais simples de iniciar um programa externo. Ela retorna um ID de tarefa, mas não aguarda o término do programa. Use este método quando não precisar esperar o script Python terminar.

  1. Abra o Editor VBA
    Pressione Alt+F11 no Word para abrir o editor Visual Basic for Applications.
  2. Insira um novo módulo
    No Project Explorer, clique com o botão direito no seu documento ou no projeto Normal e escolha Inserir > Módulo.
  3. Escreva a chamada Shell
    Cole este código no módulo:
    Sub RunPythonShell()
    Dim pythonPath As String
    Dim scriptPath As String
    pythonPath = "C:\Python39\python.exe"
    scriptPath = "C:\MeusScripts\process.py"
    Shell pythonPath & " " & scriptPath, vbNormalFocus
    End Sub
  4. Ajuste os caminhos para o seu sistema
    Substitua pythonPath e scriptPath pelos locais reais no seu computador. Se o Python estiver no seu PATH, você pode usar apenas “python.exe” em vez do caminho completo.
  5. Execute a macro
    Pressione F5 enquanto o cursor estiver dentro da sub-rotina, ou feche o editor e execute a macro do Word através de Exibir > Macros.

Método 2: Usando WshShell.Run para Aguardar a Conclusão

Quando sua macro do Word precisa aguardar o término do script Python antes de prosseguir, use o objeto Windows Script Host. Este método oferece controle sobre o estilo da janela e a sincronização.

  1. Abra o Editor VBA
    Pressione Alt+F11.
  2. Insira um novo módulo
    Clique com o botão direito no projeto e escolha Inserir > Módulo.
  3. Escreva a chamada WshShell.Run
    Cole este código:
    Sub RunPythonWsh()
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    Dim pythonPath As String
    Dim scriptPath As String
    Dim cmd As String
    pythonPath = "C:\Python39\python.exe"
    scriptPath = "C:\MeusScripts\process.py"
    cmd = pythonPath & " " & scriptPath
    wsh.Run cmd, 0, True
    Set wsh = Nothing
    End Sub
  4. Entenda os parâmetros
    O segundo parâmetro (0) oculta a janela de comando. Use 1 para mostrar uma janela normal. O terceiro parâmetro (True) informa ao VBA para aguardar até que o script termine.
  5. Execute a macro
    Pressione F5 ou execute a partir da caixa de diálogo Macros do Word.

Método 3: Passando Argumentos para o Script Python

Para enviar dados como um caminho de documento ou uma variável do Word para o Python, anexe argumentos à string de comando. O Python lê esses argumentos via sys.argv.

  1. Modifique o código WshShell.Run
    Adicione argumentos extras após o caminho do script:
    Sub RunPythonWithArgs()
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    Dim pythonPath As String
    Dim scriptPath As String
    Dim docPath As String
    pythonPath = "C:\Python39\python.exe"
    scriptPath = "C:\MeusScripts\process.py"
    docPath = ActiveDocument.FullName
    wsh.Run pythonPath & " " & scriptPath & " " & Chr(34) & docPath & Chr(34), 0, True
    Set wsh = Nothing
    End Sub
  2. Coloque caminhos com espaços entre aspas
    A função Chr(34) adiciona aspas duplas ao redor do caminho do documento para lidar com espaços nos nomes de arquivo.
  3. Escreva o script Python para receber o argumento
    No seu arquivo .py, use sys.argv[1] para acessar o primeiro argumento passado do VBA.

ADVERTISEMENT

Problemas Comuns ao Executar Python a Partir do VBA do Word

O Word Congela ou Trava ao Aguardar o Python

Quando você usa WshShell.Run com waitOnReturn:=True, o Word fica sem resposta até que o script Python termine. Isso é normal. Para evitar uma interface congelada, considere executar o script de forma assíncrona com Shell e verificar a conclusão posteriormente, ou exiba uma mensagem de status ao usuário antes de iniciar a espera.

O Script Python é Executado mas Não Produz Saída

A causa mais comum é um caminho incorreto para python.exe ou para o arquivo .py. Teste o comando em uma janela do Prompt de Comando primeiro. Se o comando funcionar lá, mas não no VBA, o problema geralmente é uma associação de extensão de arquivo ausente ou uma variável de ambiente PATH que não está disponível para o processo do Word. Sempre use o caminho completo para python.exe.

O VBA Não Consegue Encontrar o Executável do Python

Se o Python estiver instalado apenas para o usuário atual, o PATH do sistema pode não incluí-lo. Encontre a localização exata de python.exe abrindo um Prompt de Comando e executando where python. Use esse caminho completo no seu código VBA. Alternativamente, adicione Python à variável de ambiente PATH do sistema e reinicie o Word.

O Script Python Falha Devido a Módulos Ausentes

O interpretador Python iniciado pelo VBA é executado com o mesmo ambiente da conta de usuário que executa o Word. Se seu script importa bibliotecas de terceiros que não estão instaladas nesse ambiente, o script falhará. Instale os pacotes necessários usando pip a partir de uma linha de comando executada sob a mesma conta de usuário.

Função Shell vs WshShell.Run: Principais Diferenças

Item Função Shell Método WshShell.Run
Aguardar conclusão Não Sim quando waitOnReturn=True
Controle do estilo da janela Limitado a vbNormalFocus, vbHide, etc Controle numérico completo (0=ocultar, 1=normal, etc)
Valor de retorno ID da tarefa (inteiro) Nível de erro (inteiro)
Requer referência Nenhuma Requer CreateObject(“WScript.Shell”)
Melhor caso de uso Scripts do tipo “disparar e esquecer” Scripts cuja saída é necessária antes de continuar

O VBA do Word pode iniciar scripts Python externos de forma confiável usando a função Shell ou o objeto Windows Script Host. O método WshShell.Run com waitOnReturn:=True oferece execução síncrona e melhor controle sobre a janela de comando. Sempre teste seu comando em um Prompt de Comando antes de incorporá-lo ao VBA. Para scripts que modificam documentos do Word, considere passar o caminho do documento como argumento para que o Python possa acessar o arquivo diretamente.

ADVERTISEMENT