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.
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.
- Abra o Editor VBA
Pressione Alt+F11 no Word para abrir o editor Visual Basic for Applications. - 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. - 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 - 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. - 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.
- Abra o Editor VBA
Pressione Alt+F11. - Insira um novo módulo
Clique com o botão direito no projeto e escolha Inserir > Módulo. - 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 - 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. - 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.
- 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 - 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. - Escreva o script Python para receber o argumento
No seu arquivo .py, use sys.argv[1] para acessar o primeiro argumento passado do VBA.
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.