首页 文章

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

提问于
浏览
19

我想要一个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

先感谢您!

4 回答

  • 23

    这适用于Excel和Word

    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")

  • 6

    Microsoft有一个有用的教程here .

    换言之,类似下面的代码 . 但是,您可能希望将默认(工作)目录更新为文件的位置 .

    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
    
  • 5

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

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

    可以使用Shell32.Shell COM object aka Shell.Application 包装 ShellExecute Win32 API函数:

    • 通过 Tools->References...Microsoft Shell Controls And Automation 类型库的引用添加到VBA项目,然后
    Dim a As New Shell32.Shell
    Call a.ShellExecute("desktop.ini")
    
    • 或者,没有任何参考:
    Call CreateObject("Shell.Application").ShellExecute("desktop.ini")
    

    有趣的是,在这里(WinXP),当使用类型变量(提供自动完成)时,成员列表中缺少 ShellExecute (但仍然有效) .

相关问题