VBA – Shell

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on September 13, 2023

Este tutorial demonstrará como usar a função Shell do VBA.

Podemos usar a função Shell do VBA para chamar um programa executável separado de dentro de um programa VBA. Por exemplo, se precisarmos abrir o Bloco de Notas a partir do Excel, podemos usar a função Shell do VBA para fazer isso. Se a chamada do Shell for bem-sucedida, ela retornará o valor do Windows TaskID do programa chamado. Se a chamada do Shell falhar, ela retornará zero.

A função Shell tem dois parâmetros de entrada: um nome de caminho obrigatório para o programa a ser chamado e um valor opcional windowstyle que controla o estilo da janela em que o programa será executado. O valor do nome do caminho pode incluir o caminho/diretório do programa e os argumentos.

Chamar o Shell

Esse código pode fazer parte de uma macro para executar o Bloco de Notas usando o comando Call do VBA para chamar a função Shell.

Call Shell("notepad", vbNormalFocus)

Por exemplo:

shell chamar notepad

Shell Wait

Podemos usar o comando VBA Wait para atrasar a chamada do comando Shell por um período de tempo específico.

 Application.Wait (Now + TimeValue("00:00:05"))
 Call Shell("notepad", vbNormalFocus)

Portanto, 5 segundos se passarão antes que o comando Shell seja chamado.

Retorno de um Erro da Função Shell

Se houver um erro em nosso código ao chamar a função Shell, um erro será retornado e nosso código entrará no modo de depuração.

Por exemplo, nesta macro, escrevemos “note pad” incorretamente.

 Call Shell("note pad", vbNormalFocus)

O resultado da execução dessa macro será:

erro chamada notepad

Abrir um Arquivo Existente com o Shell

Se tivermos um arquivo específico que desejamos abrir com o comando Shell, podemos incluir o nome do arquivo em nosso código.

Call Shell("Notepad.exe C:\demo\shell_teste.txt", vbNormalFocus)

shell abrir arquivo texto

Se escrevermos o nome do arquivo incorretamente, ele não será encontrado e será exibida uma caixa de mensagem perguntando se desejamos criar um novo arquivo.

shell criar novo arquivo

Parâmetros Usados pela Função Shell

A função Shell tem dois parâmetros: o nome do programa a ser chamado e o estilo de janela que o programa usará. Usamos o vbNormalFocus nos exemplos acima, o que significa que quando o programa (nesse caso, o Bloco de Notas) é aberto, ele tem o foco e abre na posição e no tamanho padrão do PC.

O Shell oferece cinco outras opções:

vbHide                                    Oculta a janela e define o foco nessa janela

vbMinimizedFocus           Exibe a janela como um ícone com foco

vbMaximizedFocus          Abre o programa em uma janela maximizada com foco

vbNormalNoFocus           Restaura a janela em sua posição e tamanho mais recentes

vbMinimizedNoFocus    Exibe a janela como um ícone e a janela ativa no momento permanece ativa

Como Retornar uma ID de Processo do Comando Shell

Quando executamos o comando Shell, ele retorna um ID de processo ou de tarefa. Podemos armazenar a ID do processo em uma variável e usá-la na execução de outro comando, por exemplo, o comando TaskKill para fechar o arquivo do Bloco de Notas.

Sub TestePID
  Dim ProcessoID as integer
  ProcessoID = Shell("notepad", vbNormalFocus)
  Call Shell("Taskkill /F /PID " + CStr(ProcessoID))
  MsgBox ("Notepad ProcessID = " + CStr(ProcessoID))
End Sub

Na primeira linha, o NotePad é aberto e o Windows atribui um valor à ID do processo. Armazenamos esse valor na variável ProcessID. Em seguida, usamos o TaskKill para forçar o Notepad a fechar a instância do NotePad que acabamos de abrir. A opção /F força o Notepad a encerrar e a opção /PID diz ao TaskKill para procurar o valor do ID do processo do Notepad. A função CStr converteProcessID para o formato de cadeia de caracteres que o Shell e a MsgBox, na próxima linha, precisam.

shell id processo

Chamada de Outros Programas com o Shell

O Shell abrirá qualquer outro programa do Windows. Por exemplo, este código chama o Excel e abre o arquivo do Excel ‘exemplo_de_pasta_de_trabalho.xlsx’

Call Shell("Excel ""C:\DEMO\exemplo_de_pasta_de_trabalho.xlsx""", vbNormalFocus)

Isso mostra o arquivo aberto:

shell abrir excel

ShellExecute e ShellExecuteEx versus o comando Shell

O espaço de programação do Windows oferece as funções ShellExecute e ShellExecuteEx que chamam programas externos a partir do código do software. Em comparação com a função Shell do VBA, essas funções do Windows oferecem mais flexibilidade, mas o VBA não as suporta e, portanto, este artigo não as aborda.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA