Excel VBA:他のファイルを実行する、他のファイルを開く

Excelから他のファイルを開いたり、実行するVBAを掲載しています。




Homeに戻る > Excel ファイル操作のTipsへ

ランチャーアプリのような動作アプリを作成する場合に必要になるVBAです。

ここでは「ExcelからExcelファイルを開くVBA」「ExcelからEXEファイルを実行するVBA」「Excelから関連付けされているアプリケーションで開くVBA」の3種類を掲載しています。

ExcelからExcelファイルを開くには、Workbooks.Openメソッドを使用します。

構文は、Workbooks.Open("フルパス")になります。

ExcelからEXEファイルを実行するには、Shell関数を使用します。

構文は、Shell(pathname[,windowstyle])になります。

引数のpathnameには、実行するプログラムの名をフルパスで指定します。

windowstyleは省略可能で、実行時のウィンドウ形式を指定します。使用できる定数は下記になります。

定数 内容
vbHide 0 フォーカスを持ち非表示で表示されます。
vbNormalFocus 1 元のサイズと位置に、フォーカスを持ち表示されます。
vbMinimizedFocus 2 フォーカスを持ち最小化で表示されます。
vbMaximizedFocus 3 フォーカスを持ち最大化され表示されます。
vbNormalNoFocus 4 元のサイズと位置に、フォーカスを持たずに表示されます。
vbMinimizedNoFocus 6 フォーカスを持たずに最小化で表示されます。

Excelから関連付けされているアプリケーションで開くには、ShellExecuteとGetDesktopWindowのWindows APIを使用します。

ShellExecuteは、指定したファイルを関連付けられたアプリケーションで開くAPIです。

ShellExecuteの構文は下記になります。

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

  • hwnd:親ウィンドウのハンドル
  • lpOperation:"open"(開く)、"print"(印刷)、"explore"(指定フォルダをエクスプローラ表示) のどれかを指定します。
  • lpFile:フルパス名
  • lpParameters:開くアプリケーションに渡すパラメータ l
  • pDirectory:デフォルトのフォルダ名
  • nShowCmd:表示方法を指定、使用する定数は下記になります。
  • 成功の場合、実行されたアプリケーションのハンドルが返ります。
    失敗の場合エラー値が返ります。
定数 内容
SW_HIDE 0 非表示で表示されます。
SW_SHOWMINIMIZED 2 最小化で表示されます。
SW_SHOWMINIMIZED 3 最大化され表示されます。
SW_SHOW 5 現在の位置とサイズで表示されます。
SW_RESTORE 6 元の位置とサイズで表示されます。

GetDesktopWindowは、ウィンドウハンドルを取得するAPIです。

GetDesktopWindowの構文は下記になります。

Declare Function GetDesktopWindow Lib "user32" () As Long


ShellExecuteについては「関連付けられたファイルを開く」を掲載していますので、参考にしてください。



Excelから他のファイルを開いたり、実行するVBA

ExcelからExcelファイルを開く

'Excelファイルを開く
Workbooks.Open Filename:="c:\test.xls"

ExcelからEXEファイルを実行する

'EXEファイルを実行する
Shell "c:\test.exe", 1

Excelから関連付けされているアプリケーションで開く

'関連付けされているアプリケーションで開く 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

Private Const SW_SHOWNORMAL = 1
Private Const SW_SHOWMINIMIZED = 2
Private Const SW_SHOWMAXIMIZED = 3
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

'デスクトップのハンドルを取得する
Private Declare Function GetDesktopWindow Lib "user32" () As Long


'関連付けされているアプリケーションで開く
Public Sub ExKanrenFileOpen(hwnd As Long, FilePath As String, parameter As String, WorkPath As String, WindowSize As Long)
     Dim ret As Long
     Dim msg As String

     ret = ShellExecute(hwnd, "Open", FilePath, parameter, WorkPath, WindowSize)

     If ret < 31 Then   'エラー発生の場合
         Select Case ret
             Case 0
                 msg = "メモリ不足です。"
             Case ERROR_FILE_NOT_FOUND
                 msg = "ファイルが見つかりません。"
             Case ERROR_PATH_NOT_FOUND
                 msg = "ファイルのパスが見つかりません。"
             Case Else
                 msg = ret & "その他のエラー"
         End Select
         MsgBox msg, vbCritical, "Excelランチャー"
     End If
End Sub

'関連付けされているアプリケーションで開く 実行例
Dim hwnd As Long
hwnd = GetDesktopWindow
ExKanrenFileOpen hwnd, "c:\test.txt", "", "", SW_SHOWNORMAL

Homeに戻る > Excel ファイル操作のTipsへ

■■■
このサイトの内容を利用して発生した、いかなる問題にも一切責任は負いませんのでご了承下さい
■■■
当ホームページに掲載されているあらゆる内容の無許可転載・転用を禁止します


Copyright (c) Excel-Excel ! All rights reserved