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 Automation
types库的引用添加到VBA项目Dim a As New Shell32.Shell Call a.ShellExecute("desktop.ini")
-
另外,没有任何参考:
Call CreateObject("Shell.Application").ShellExecute("desktop.ini")
有趣的是,在这里(WinXP),当使用types化variables(提供自动完成)时, ShellExecute
从成员列表中丢失(但工作仍然)。