Come può Excel VBA aprire il file utilizzando l’applicazione predefinita

Voglio un foglio di lavoro Excel con un percorso e un nome file nella colonna A. Quando viene eseguita una macro, diciamo che il file specificato in A1 deve essere aperto sul computer dell’utente. Il file potrebbe essere .doc, .xls, .txt, ecc …. piuttosto che il mio vba che ha bisogno di conoscere il percorso completo dell’applicazione, come potrei avere il vba dire alla macchina “per favore apri questo file e usa la tua applicazione associato all’estensione “?

Ho già trovato questo per funzionare con il percorso completo:

dblShellReturned = Shell("C:\Windows\System32\notepad.exe myfile.txt, vbNormalFocus) 

come potrei farlo funzionare con qualcosa come:

 dblShellReturned = Shell("myfile.txt", vbNormalFocus) ' how do I get this to work 

Grazie in anticipo!

Questo funziona per me in Excel e Word

 Sub runit() Dim Shex As Object Set Shex = CreateObject("Shell.Application") tgtfile = "C:\Nax\dud.txt" Shex.Open (tgtfile) End Sub 

o … come da commento di Expenzor qui sotto

CreateObject("Shell.Application").Open("C:\Nax\dud.txt")

Microsoft ha un tutorial utile qui .

Per parafrasare, qualcosa come il codice qui sotto. Tuttavia, è ansible aggiornare la directory (di lavoro) predefinita alla posizione del file.

 Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _ (ByVal hwnd As Long, ByVal lpszOp As String, _ ByVal lpszFile As String, ByVal lpszParams As String, _ ByVal LpszDir As String, ByVal FsShowCmd As Long) _ Function StartDoc(DocName As String) As Long Dim Scr_hDC As Long Scr_hDC = GetDesktopWindow() StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _ "", "C:\", SW_SHOWNORMAL) End Function 

Il comando Shell di VBA richiede un exe, quindi ho avviato explorer.exe e inserito il mio percorso file come argomento. Sembra funzionare anche con le scorciatoie * .lnk e gli URL web.

 Shell "explorer.exe C:\myfile.txt" 

Shell.Application ansible utilizzare l’ object COM Shell32.Shell noto come Shell.Application la funzione API Win32 ShellExecute :

  • Aggiungi un riferimento a Microsoft Shell Controls And Automation libreria dei tipi di Microsoft Shell Controls And Automation al progetto VBA tramite Tools->References... , quindi

     Dim a As New Shell32.Shell Call a.ShellExecute("desktop.ini") 
  • In alternativa, senza riferimenti:

     Call CreateObject("Shell.Application").ShellExecute("desktop.ini") 

È interessante notare che qui (WinXP), quando si utilizza una variabile tipizzata (che fornisce il completamento automatico), ShellExecute è presente nell’elenco dei membri (ma funziona comunque).