22

列 A にファイル パスと名前がある Excel スプレッドシートが必要です。マクロを実行すると、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

5 に答える 5

37

これは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")

于 2013-09-20T17:11:22.520 に答える
11

VBA の Shell コマンドは exe を必要とするため、explorer.exe を起動し、ファイル パスを引数として渡しています。*.lnk ショートカットと Web URL でも動作するようです。

Shell "explorer.exe C:\myfile.txt"
于 2016-10-06T18:46:30.590 に答える
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
于 2013-09-20T16:53:32.213 に答える