関連付けされたファイルを起動
                                                        玄関へお回り下さい。
関連付けされたファイルを起動(*.Xls 等)                 (050)

 色々とやり方がありますので、あなたの環境に合ったやり方で試してください
 (ファイルのパス等はご自分の環境に合せて書き直して下さい。)
   
構文
  Call Shell("start.exe 起動ファイル名")

使用例 1

Private Sub Command1_Click()
  Call Shell("start.exe test.xls")
  'Call Shell("start.exe c:test.xls") 'こちらは起動しない
  'start.exe は Win95・98用です。WindowsXP では使用できません
End Sub

Private Sub Command5_Click()
  'こちらはWindowsXPでも可
  Call Shell(Environ("ComSpec") & " /c start test.xls")
End Sub

  ルートディレクトリにある”c:\test_1.xls”がエクセルとともに立ち上がる 

使用例 2
Private Sub Command2_Click()
'空白を使用したフォルダー名用
  'Call Shell("start.exe c:\My Documents\test.xls")
  ' ↑ これでは起動しない

  Dim MyFile1 As String
  MyFile1 = Chr$(34) & "c:\My Documents\test.xls" & Chr$(34)
  Call Shell("start.exe " & MyFile1)
         '  ↑ 1文字空白を入れる
End Sub


  又は
Private Sub Command3_Click()
'関連付けがなくても起動できるが環境に影響される
  Dim MyFile1 As String
  Dim MyFile2 As String
  Dim MyFile3 As String
  Dim ret   As Long
  MyFile1 = "c:\My Documents\test.xls"
  '拡張子を照合して(大文字小文字の区別せず)合っていれば起動
  If StrComp(Right$(MyFile1, 3), "xls", 1) = 0 Then
    MyFile2 = "C:\Program Files\Microsoft Office\Office\Excel.exe "
    MyFile3 = Chr$(34) & MyFile1 & Chr$(34)
    '後は通常のEXEファイルを起動する要領で
    ret = Shell(MyFile2 & MyFile3, vbMaximizedFocus)
  End If
End Sub



  これでもエクセルファイルが立ち上がります。  

ちょっと便利な使い方
   上記の例で
  c:\My Documents のような空白を使用したフォルダー等はShell関数
  では使用できません。(MS-DOS 流ルールにより)
  そこでファイル名にChr$(34) & "ファイル名" & Chr$(34) を追加すること
  で空白入りファイルが使えるようになります。

Win32 API関数を使ったやり方
  
宣言セクションに記入

Option Explicit

'拡張子に関連付けられたプログラムを実行する  (P699)
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_SHOWMAXIMIZED = 3 'ウィンドウをアクティブ化し最大表示する


Private Sub Command4_Click()
'APIを使って関連付け起動
  Dim ret As Long
  Dim MyFile1 As String
  MyFile1 = "c:\My Documents\test.xls"
  'MyFile1 = "test.xls"
  ret = ShellExecute(Me.hwnd, "Open", MyFile1, _
       vbNullString, vbNullString, SW_SHOWMAXIMIZED)
End Sub


他のウィンドウの表示方法は定数を別途調べて下さい。




2003/04/27