VBA – Shell
In this Article
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 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á:
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)
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.
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.
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:
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.