• ベストアンサー

ExcelVBA 他のアプリケーションを開く2

こんにちは! これは、セルに書いてあるファイルの絶対パスを読み取り、そのファイルを開くというマクロです(前に質問した時の回答抜粋です) Set WSH = CreateObject("WScript.Shell") If TypeName(Target) = "Range" Then flName = Target.Value WSH.Run flName ・・・(1) End If (1)の部分で、ファイルの絶対パスに空白が含まれる場合、エラーになって開けません・・・(Documents and Settingsのように) 回避する方法はないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

ついでに。 コマンドラインの場合、パスに空白があるとパラメータ付きと解釈されて しまうので失敗します。その場合は”(Chr(34)だったと思う)で括って やります。 WSH 以外の方法では、API を使う方法があります。こちらの方が、汎用的 ですね。 Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _     ByVal hwnd As Long, _     ByVal lpOperation As String, _     ByVal lpFile As String, _     ByVal lpParameters As String, _     ByVal lpDirectory As String, _     ByVal nShowCmd As Long _ ) As Long ' // ファイルに関連付けられたプログラムで実行する Public Function ShellEx( _   ByVal Command As String, _   ByVal PathName As String _ ) As Boolean   ' 引 数:Command 動作のコマンド[Open]とか[Print]とか   ' 引 数:PathName ファイルパス   ' 戻り値:成功 True / 失敗 False      Dim lRet   As Long   If PathName <> "" Then     PathName = Chr(34) & PathName & Chr(34)     lRet = ShellExecute(0&, Command, PathName, "", "", 1&)     If lRet >= 32 Then       ShellEx = True     End If   End If End Function Sub Sample()   If ShellEx("Open","C:\Sample Folder\Sample.exe") = True Then     MsgBox "起動しました"   Else     MsgBox "起動に失敗しました"   End If End Sub 余談ですが、前回のファイル一覧出力のご質問にも回答してますので、 よかったらご覧下さい。

jobvba
質問者

お礼

いやー何度もありがとうございます! お返事を書く前に新しい質問をしてしまい、申し訳ないです 結構いろんな方法で開くことが出来るんですね! 参考になります!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

WSH.Run Chr(34) & flName & Chr(34) でどう?  

すると、全ての回答が全文表示されます。

関連するQ&A