Você está na página 1de 4
asnon2 ‘Abr Aequivos Programaticamente - VBA- Ambionto Offco *; Ambiente Office 5 Busque neste site: Abrir Arquivos Programaticamente tia atualizacso: 26/06/2012 Introdugo © Comando Shell -Executar Shell Sincronicamente © Comando ShellExecute Comentarios Referancias Introdugao Esta pagina descreve como se abre um arquivo programaticamente através do VBA. © Comando Shell © exemple abaixo abre a cakuladora do Windows: Sub Testeshell() Shell ("cr \Wwindows\systen32\cale.exe") End Sub No entanto, a limitacSo dese comando é ele abrir somente arquivos executdvels. Por exemplo, se vocé quiser abrir uma Pas Trabalho espectica do Excel, ter que fazer algo do tipo: Sub Testeshell2() Shell ("C:\Program Files\Microsoft OFFice\OFFicetA\EXCEL.EXE " & """C:\tenp\Pastal.xisn"*") nd Sub Note que isso gera um desconforto, pois se © arquivo fosse um Documento de Word, a primeira parte da expressao teria qut caminho da Aplicagso de Word, Se 0 arquivo fosse um pdf, 0 caminho teria que ser do Adobe Reader e assim por dante. O Shellexecute, apresentado 2 seguir, contorna essa situacso Executar Shell Sincronicamente © comanda Shell é, por padréo, assincrono. Isto &, sua rotina em VBA continua sua execugio ao abrir o arquive desejado. & voct executé-lo sincronicamente, isto é, interromper a execugSo do VBA enquanto o programa chamado no for finalizado. U ababxo Private Const conUseShosWindow = aHi& Private Const conNormalPrionity = 81208 Private Const eontnfinite = -28 “Prefixo de varidvels Windows APE ‘eb = Count of Bytes (32-bit) ‘w= Word (16-bit) Douole wore (32-bit) Long Pointer (32-bit) Boolean (32-bit: Handle (32-bit) Unsigned Long (32-bit) \wivw.amblonteofice.com brlficevealabrir_arquives_programaticamenta/ 1“ asnon2 <=" SBS Oy BY Al aa iy ‘Abr Aequivos Programaticamente - VBA- Ambionto Offco Private Type typStartuptnfo eblen &s Long, IpReserved As String Ipbesktop As String IpTitle As String ‘aux As Long uy AS Long uxSize As Long auvsize As Long feuxCount As Long uvCount As Long GuFALIAtE As Long uFlags As Long WShowldindow As Integer coReserved2 As Integer IpReserved2 As Long nstdin As Long nstdout As Long nStdErr As Long End Type Private Type typProcinfo nProc As Lone nthread As Long @uProcID As Long duthreacto As Long End Type Private Declare Function CreateProcessA Lib “kernel32" ( _ Syval IpapplicationNiane As Long, sy al IpcommandLine As String, — syal IpProcessActributes As long, _ ayval IpThreadat syal binheritHandles As Lone, Syal dwCreationFlags As Long, — Syal Ipenvironment As Long, syvai IpCurrentDirectory As Long, _ IpStartupinfo As typstartuprnfo, IpProcessinformation As typProcinfo) As Long Private Declare Function waitForSingleobject Lib "kernel32" (_ Syvai handle As Long, _ ay al dhiil iseconds As"Long) As Long Private Declare Function CloseHandle Lib "kernel32" ( _ Byval hObject As Long) As Long Sub Testar() Shellbait "C: \Windows\system32\calc.exe' End Sub Public Sub ShellWait(strCommand As String, _ Optional inwinstyle AS Vbappiinstyle = voNornalFocus) Din odjprocinfo As typProciafo Din objstart As typStartupInfo ‘A estrutura de typStartupInfo: With objstart colen = Len(objstart) ‘duFlags = conUseShowlindow Showvindow = inthinstyle End With Executa a aplicarao: call CreateProcessA(IpApplicationNone:=@8, _ pConsandt ine:=strconmand, IpProcessattributes:=08, ApThreadattributes:=08, binherstHandles: duCreationF lags: IpEnvironnent:=@8, _ ApCurrentDirectory:=@8, _ IpstartupInfo:-objstart, — ApProcessInfornation: -objProcinfo) ‘Aguarda 0 térnino da aplica¢ao: call WaitForSingleobject (hiandle:-objprocinfo-heroc, _ duttiliseconds:=contnfinite) 0 JProcInfo.hProc) call CloseHlandle(nobject: End Sub \wivw.amblenteotice.com brloficevealabir_arquives_programaticamenta/ 28 asnon2 ‘Abr Aquivos Programaticamente - VBA- Ambionto Offco O Comando ShellExecute © Shellexecute pade ser interpretade como se 0 usuério desse um duplo clique num arquivo, a partir do Windows Explorer. arquivo alvo sera aberto pela associacdo padrao que o mesmo possui no registro do Windows: ShellExecute é uma chamada API. A declaracio dela apresentada a seguir ¢ compativel com verses 32 € 64 bits. Para sab« sobre esse assunto, clique aqui Const Sw_SHOMAXIMEZED = 3 ‘1 VBA Then Private Declare PtrSafe Function Shelléxecute Lib "shel132.dl1" Alias "shellExecutes" _ (ByVal hind As LongPtr, _ ByVal IpOperation As string, _ ByVal ApFile As String, _ ByVal IpParaneters As Sting, _ ByVal ApDirectory As String, ByVal nShowced AS LongPtr) As LongPtr else Private Declare Function Shelléxecute Lib "shel152.d11" Alias "Shellexecutea" (Byval hwnd As Long, — Bylal ApOperation AS String, _ Byval IpFile As String, _ ByVal ApParanevers As String, _ ByVal Ippirectory As string, _ ByVal nShowGnd AS Long) AS Long send IF Sub TesteshellExecute() Shellexecute Application.hwnd, “open”, "C:\tenp\Pastat.xlse", vbNullstring, "C:\", Sh_SHOMMAXIMIZED End Sub Observe que o pardmetro de interesse é 0 caminho do arquivo, Basta replicar 0 cédigo acma mudando apenas o caminho & abriré na Aplicagao registrada carrespondente no Windows. No entanto, hé outro parémetro que pode nos interessar, que & como o arquivo seré aberto (Jltimo pardmetro). No exemple arquivo abrird sempre em tela chela. Para saber os valores das outras constantes ¢ allernativas de estado da janela, consu http: //msdn.microsoft.com/en-us/library /bb762153(v=vs.85).aspx « \Vocé pode também usar o ShellExecute como uma fungle e atribuir uma varidvel a ele, como mostrade no exemple a seguir Const SW_SHOMMAXIMEZED = 3 Const ERROR_FILE_NOT_FOUND = 2 0 VBA Then Private Declare PtrSafe Function Shelléxecute Lib "shel132.d11" alias (ByVal hind As LongPtr, ByVal IpOperation As string, _ ByVal ApFile As String, _ ByVal ApParaneters As Strings _ ByVal Ippirectory As String, ByVal AShowcmd AS LongPtr) As LongPtr selse Private Declare Function Shelléxecute Lib "Shel132.d11" Alias “Shel lexecutea" (Byval hand As Long, — ByVal ApOperation AS String, _ Byval IpFile As String, _ ByVal ApParaneters As String, _ ByVal IpDirectory As string, _ ByVal nShowcad As Long) A Long send 1 Sub Testeshel1execute2() se = Shelléxecute(Application.hwnd, “open”, "C:\tenpo\Pastai.xlsn", vbNuLIString, "C:\", SW_SHOAMAXIMIZED) Select Case se ‘Case. ERROR_FILE_NOT_FOUND MsgBox “Atericao? caminho no encontrado. case 1s > 32 MsgBox “Arquivo aberto con sucesso. End select End Sub Para saber sobre os cédigos de erro ou de operacio bem sucedida, verinque http://msdn.microsoft.com/en- tus/library/bb762153(v=vs.85) aspx \wivw.amblontoofice.com brlficevealabrir_arquivos_programaticamenta/ 3a asnon2 ‘Abr Aequivos Programaticamente - VBA- Ambionto Offco Comentarios ‘A desvantagem dos métodos apresentados é que, uma vez o arquivo/aplicacio for aberto, no seré possivel manipuld-los programaticamente. Se o desejo do usuario for esse, consulte como atribuir varidvels 8 Aplicagées conforme mostrado em: Criar uma Instn do Excel pelo VBA Criar uma Instaneia do Word pelo VBA Referéncias Bytes.com: http:/ /bytes.com/topic/access/insights/841878-sh ‘Microsoft: http: / /msdn.microsoft.com/en-us/library /bb762153(1 iwait-function v8.85). Px Download: Para baixar um arquivo de exemplo pronto, clique aq Salba Mais! xents.comprLinoass Dreamweaver CSS Fundamental -Desconto de 30% inane undacdos -Helice (CFA), Raiz Fundagdes, Sondagem e Contengées walbincs S c, BALBINO Fundacdes 19-3241.2699 -Helice (CFA), Raiz Fundagbes, Sondagem o Contangé ke Site de Felipe Costa Gualberto, Belo Horizonte, Brasil, 2009-2012. benzadeus4 @ambienteoffice.com.br ‘wiv amblontoofice.com brlficevbalabrir_arquives_programaticamenta/ a8

Você também pode gostar