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

Mic*_*B12 22 excel vba excel-vba

我想要一个Excel电子表格,其中包含A列中的文件路径和名称.运行宏时,假设应在用户的计算机上打开A1中指定的文件.该文件可能是.doc,.xls,.txt等....而不是我的vba需要知道应用程序的完整路径,我怎么能让vba告诉机器"请打开这个文件并使用你的应用程序与扩展相关联"?

我已经发现这可以使用完整的路径:

dblShellReturned = Shell("C:\Windows\System32\notepad.exe myfile.txt, vbNormalFocus)
Run Code Online (Sandbox Code Playgroud)

我怎么能让它与以下的东西一起工作:

dblShellReturned = Shell("myfile.txt", vbNormalFocus) ' how do I get this to work
Run Code Online (Sandbox Code Playgroud)

先感谢您!

Tin*_*Bum 28

这适用于Excel和Word

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

或者......根据Expenzor的评论如下

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

  • 或者单行:`CreateObject("Shell.Application").Open("C:\ Nax\dud.txt")` (6认同)

And*_*ASM 7

下面的代码是一个模板.但是,您可能希望将默认(工作)目录更新为文件的位置.

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
Run Code Online (Sandbox Code Playgroud)

  • @SiddharthRout我宁愿把问题中的一些有用的东西作为答案并将其关闭,所以这不是死路一条,而且还没有在未答复的问题清单上浮动.那里有一些值得回答的旧问题,但是它们在混乱中迷失了. (6认同)
  • @SiddharthRout哦,我并不总是注意评论.我错过了那个.我不明白为什么人们在那里提出答案,它似乎打破了堆栈溢出模型并弄乱了搜索. (4认同)
  • 不用担心:)我有时也错过评论。关于你的问题。我个人认为,出于某些原因,我们中的一些人在评论中回答。我的是(不一定是其他人)...`1`通过链接发布的答案并没有太多附加值,例如:MSDN链接`2`毫无意义地重新发明了Wheel。我们不是在这里收集Upvotes,而是为了帮助人们`3`这个问题已经问了很多遍了。`4`这是OP学习的绝佳机会。希望这能回答你的问题 :) (2认同)

小智 6

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

Shell "explorer.exe C:\myfile.txt"
Run Code Online (Sandbox Code Playgroud)