Usando a função ShellExecute no VBA

abril 29th, 2008 by Tomás Vásquez

A maioria dos desenvolvedores VBA conhecem a função Shell, que permite executar aplicativos baseados em seu caminho completo, por exemplo:

Shell("C:\Aplicativo.exe")

Porém, esta rotina se aplica apenas a executáveis. Caso fosse necessário abrir determinado arquivo, por exemplo, um documento do Word, existem dois caminhos:

- Passar o caminho do documento como parâmetro para o aplicativo usando a própria função Shell, por exemplo:

Shell ("WINWORD" & " " & """C:\temp\documento.doc""")
- Usar a função ShellExecute.

A função ShellExecute é capaz de “executar” um determinado arquivo, abrindo o arquivo associado a este, parâmetro determinado pelo Windows. É útil quando sabemos apenas o caminho do arquivo, e não de seu aplicativo, até porque isso pode mudar de computador para computador. Um exemplo do código pode ser visto abaixo:

Const SW_SHOW = 1
Const SW_SHOWMAXIMIZED = 3
Public Declare Function ShellExecute Lib "Shell32.dll" Alias "ShellExecuteA" _
                                     (ByVal hwnd As Long, _
                                      ByVal lpOperation As String, _
                                      ByVal lpFile As String, _
                                      ByVal lpParameters As String, _
                                      ByVal lpDirectory As String, _
                                      ByVal nShowCmd As Long) As Long

Sub AbrirArquivo()
    On Error Resume Next
    Call ShellExecute(0, "open", "caminho do arquivo", "argumentos", _
                          "pasta onde está localizado o arquivo", SW_SHOWMAXIMIZED)
End Sub

As constantes declaradas são apenas para auxiliar a chamada da função. Perceba que é necessário apenas saber o caminho do arquivo. Os parâmetro “argumentos” pode ser vazio caso não seja necessário.

É mais uma alternativa para facilitar a manipulação de arquivos sem fazer referências diretas em nosso aplicativo.

Bom proveito!

Tomás Vásquez



0 Responses to “Usando a função ShellExecute no VBA”

  1. No Comments

Leave a Response