VBA: Uso do comando SHELL com as aplicações VBA

VBA: Uso do comando SHELL com as aplicações VBA


Veja também:


Talvez a utilização deste comando SHELL seja rara, mas como desejo ser abrangente deixarei um registro sobre o assunto.

Tanto no MS Excel, quanto no MS Access e nas demais aplicações MS Office que utilizam o VBA, sempre recebemos uma mensagem de erro "chamada de procedimento inválida" quando tentamos utilizar quaisquer comandos principais do MS-DOS com a função SHELL. Por quê?

Isso ocorre porque a função SHELL no VBA não inicia uma instância específica do interpretador de comando do MS-DOS (Command.com ou CMD). Ou seja, os principais comandos do MS-DOS não estão presentes.

Somente arquivos que têm as extensões .exe.com ou .bat podem ser executados através da função de SHELL sem maiores transtornos. Os comandos que retornam a mensagem de erro "chamada de procedimento inválida", são: DIRCLSDELETECDMDRDMKDIRRMDIRCOPIAR.


Solucione esse problema executando comandos VBA equivalentes:

Execute a maioria das funções fornecidas pelo Command.com através de comandos similares incluídos no VBA:


MS-DOS                              VBA

DEL [drive][path]filename               Kill "[drive][path]filename"

CD [drive][path]                              ChDir "[drive][path]"

MD [drive][path]directory name     MkDir "[drive][path]directory name"

RD [drive][path]directory name      RmDir "[drive][path]directory name"

COPY [source] [destination]           FileCopy "[source]","[destination]"

DIR [path]                                        Dir("[path]",[attributes])


IMPORTANTE: O VBA para os comandos de diretórios de aplicativos não funcionam do mesmo modo como os seus equivalentes no MS-DOS, o qual em muitos casos requer código extra para recuperar um diretório inteiro, por exemplo. Nos casos em que forem absolutamente essenciais o uso dos principais comandos do MS-DOS, sempre será possível chamarmos uma instância do interpretador de comandos manualmente e passar para o comando desejado.



Experimente a seguinte sintaxe:
Let a = Shell("command.com /c [command]", [WindowStyle])

IMPORTANTE: Deve-se incluir /c para que o comando a ser executado ocorra corretamente.

Por exemplo, para executar um comando de diretório em todos os arquivos ocultos no diretório raiz, use a seguinte sintaxe:

Shell("command.com /c dir c:\ /ah", 1)

Em uma sessão do MS-DOS normal quando estiver usando o Windows, o interpretador de comando MS-DOSCommand.com (ou CMD), estará presente para lidar com os comandos de núcleo.

Para mostrar que o interpretador de comando MS-DOS (Command.com ou CMD), não está na memória, use o código VBA a seguir para o comando de aplicativos: a = Shell("MEM /C /P", 1)

Compare isso com a saída do comando MEM quando for executado numa sessão do MS-DOS no Windows. A única diferença é que o Command.com (ou CMD) não esteja na memória dentro do ambiente criado pelo VBA através da função shell de aplicativos.


Hurry Up!




Envie seus comentários e sugestões e compartilhe este artigo!
brazilsalesforceeffectiveness@gmail.com
✔ Brazil SFE®✔ Brazil SFE®´s Facebook´s Profile  Google+   Author´s Professional Profile  ✔ Brazil SFE®´s Pinterest       ✔ Brazil SFE®´s Tweets

Nenhum comentário:

Postar um comentário

diHITT - Notícias