Excel VBA如何使用默认应用程序打开文件

我想要一个Excel电子表格,在列A中有一个文件path和名称。当一个macros运行时,让我们说在A1中指定的文件应该在用户的机器上打开。 该文件可以是.doc,.xls,.txt等….而不是我的vba需要知道应用程序的完整path,我怎么可以告诉机器vba“请打开这个文件,并使用您的应用程序与扩展关联“?

我已经find了这个工作的完整path:

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

我怎么能得到它与如下工作:

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

先谢谢你!

这在Excel和Word中适用于我

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

微软在这里有一个有用的教程。

解释,像下面的代码。 但是,您可能需要将默认(工作)目录更新到文件的位置。

 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 

VBA的Shell命令需要一个exe文件,所以我一直在启动explorer.exe并传入我的文件path作为参数。 它似乎也适用于* .lnk快捷方式和url。

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

Shell32.Shell COM对象又名Shell.Application可以用于包装ShellExecute Win32 API函数:

  • 然后,通过Tools->References... Microsoft Shell Controls And Automationtypes库的引用添加到VBA项目

     Dim a As New Shell32.Shell Call a.ShellExecute("desktop.ini") 
  • 另外,没有任何参考:

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

有趣的是,在这里(WinXP),当使用types化variables(提供自动完成)时, ShellExecute从成员列表中丢失(但工作仍然)。