ファイル上で[Shift+右クリック]をすると表示されるメニュー、「アプリケーションから開く(E)...」のダイアログをプログラムから出す方法として、次の方法があります。 APIを使わない方法 Shell関数を実行します。 Shell "rundll32 shell32.dll,OpenAs_RunDLL " & "開きたいファイルの名前", vbNormalFocus この場合、ファイル名はクォーテーションで囲む必要はありません。また、フォルダも指定することができます。(びっくり!) APIを使った方法 ShellExecute, ShellExecuteEx関数を実行します。ここでは、ShellExecuteExの場合のみについて説明します。 '構造体 Type SHELLEXECUTEINFO cbSize As Long fMask As Long hwnd As Long lpVerb As String lpFile As String lpParameters As String lpDirectory As String nShow As Long hInstApp As Long lpIDList As Long lpClass As String hkeyClass As Long dwHotKey As Long hIcon As Long hProcess As Long End Type '定数 Public Const SEE_MASK_INVOKEIDLIST = &HC Public Const SEE_MASK_NOCLOSEPROCESS = &H40 ' ShellExecute APIの宣言 Declare Function ShellExecuteEx Lib "shell32.dll" (SHINFO As SHELLEXECUTEINFO) As Long ' 「ファイルを開くアプリケーションの選択」ダイアログを表示する。 Public Sub ShowOpenAsDialog(ByVal strFilename As String, ByVal OwnerHwnd As Long) Dim SHINFO As SHELLEXECUTEINFO Dim r As Long With SHINFO .cbSize = Len(SHINFO) .fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST .hwnd = OwnerHwnd .lpVerb = vbNullChar .lpFile = "rundll32" .lpParameters = "shell32.dll,OpenAs_RunDLL " & strFilename .lpDirectory = vbNullChar .nShow = vbNormalFocus .hInstApp = 0 .lpIDList = 0 End With 'APIを呼び出す r = ShellExecuteEx(SHINFO) End Sub ShellExecute(Ex)関数を使用する時に注意する点は、lpParametersメンバ(ShellExecute関数では引数)に、 VBのShell関数ではつなげていた引数を分けて代入しないといけないことです。 分けていれなかった時は、エラーが表示されます。成功した時は、下のようなダイアログが表示されます。 |