我想要一个Excel电子表格,其中包含A列中的文件路径和名称。运行宏时,请说明在A1中指定的文件应该在用户的计算机上打开。该文件可能是.doc,.xls,.txt等....而不是我的vba需要知道应用程序的完整路径,我怎么能让vba告诉机器"请打开这个文件,使用与扩展程序相关联的应用程序" ?
我已经发现这可以使用完整路径:
dblShellReturned = Shell("C:\Windows\System32\notepad.exe myfile.txt, vbNormalFocus)
我怎么能让它与以下的东西一起工作:
dblShellReturned = Shell("myfile.txt", vbNormalFocus) ' how do I get this to work
提前谢谢!
答案 0 :(得分:25)
这适用于我在Excel&字
Sub runit()
Dim Shex As Object
Set Shex = CreateObject("Shell.Application")
tgtfile = "C:\Nax\dud.txt"
Shex.Open (tgtfile)
End Sub
或......根据Expenzor的评论
CreateObject("Shell.Application").Open("C:\Nax\dud.txt")
答案 1 :(得分:6)
以下代码是模板。但是,您可能希望将默认(工作)目录更新为文件的位置。
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
答案 2 :(得分:5)
VBA的Shell命令想要一个exe,所以我一直在启动explorer.exe并传入我的文件路径作为参数。它似乎也适用于* .lnk快捷方式和网址。
Shell "explorer.exe C:\myfile.txt"
答案 3 :(得分:1)
Shell32.Shell
COM object aka Shell.Application
来包装ShellExecute
Win32 API函数:
通过Microsoft Shell Controls And Automation
将Tools->References...
类型库的引用添加到VBA项目,然后
Dim a As New Shell32.Shell
Call a.ShellExecute("desktop.ini")
或者,没有任何参考:
Call CreateObject("Shell.Application").ShellExecute("desktop.ini")
有趣的是,在这里(WinXP),当使用类型变量(提供自动完成)时,成员列表中缺少ShellExecute
(但仍然有效)。
答案 4 :(得分:0)
我无法评论现有答案(得分不足),因此我在回答以添加信息。
从Access 2010开始,我遇到了以下语法的无提示故障:
Dim URL As String
URL = "http://foo.com/"
CreateObject("Shell.Application").Open URL
如果将URL
括在括号中,则可以使它工作,但是对于子例程(而不是函数)调用语法,这似乎是错误的。我尝试吞下返回值,但是除非使用括号将其加倍,否则函数调用语法将失败。我意识到括号不仅是语法糖,它们还必须做一些事情,这使我相信括号可能会促进隐式转换。
我注意到Open
期望Variant
,而不是String
。因此,我尝试了CVar
,它确实有效。考虑到这一点,我最好采用以下方法,因为它最大程度地减少了“为什么这里有多余的括号?”。问题。
Dim URL As String
URL = "http://foo.com/"
CreateObject("Shell.Application").Open CVar(URL)
教训是,在进行OLE自动化调用时,请明确说明要使Access VBA正确地进行转换!