使用頻度の高いダイアログのサンプルコードと使用例です。
サンプルコードの本体はページの最後にあります。
目次
ファイルを開くダイアログ
[使用例]
Private Sub Button_Open_Click()
Dim ret As Integer
Dim FileName As String
ret = OpenDialog("", "CSVファイル (*.csv),*.csv,テキストファイル (*.txt),*.txt", FileName)
If ret = 0 Then
Range("G4") = FileName
Else
Range("G4") = "キャンセル"
End If
End Sub
名前を付けて保存ダイアログ
[使用例]
Private Sub Button_Save_Click()
Dim ret As Integer
Dim FileName As String
ret = SaveDialog("", "", "CSVファイル (*.csv),*.csv,テキストファイル (*.txt),*.txt", FileName)
If ret = 0 Then
Range("G8") = FileName
Else
Range("G8") = "キャンセル"
End If
End Sub
フォルダー選択ダイアログ
[使用例]
Private Sub Button_Select_Click()
Dim ret As Integer
Dim SelectDir As String
ret = SelectDialog("", SelectDir)
If ret = 0 Then
Range("G12") = SelectDir
Else
Range("G12") = "キャンセル"
End If
End Sub
サンプルコード
'サーバー上のフォルダーを指定できるよう SetCurrentDirectory を使用する
#If VBA7 Then
Declare PtrSafe Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long
#Else
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal CurrentDir As String) As Long
#End If
'最後に開いたフォルダー
Private Last_OpenDir As String
'最後に保存したフォルダー
Private Last_SaveDir As String
'最後に選択したフォルダー
Private Last_SelectDir As String
'*******************************************************************************
' ファイルを開くダイアログ
' input : IniDir = 初期表示フォルダー (空なら最後に開いたフォルダー)
' Filter = ファイルフィルター (例:"CSVファイル (*.csv),*.csv")
' output : FileName = ファイル名
' return : 0=成功 / 1=キャンセル
'*******************************************************************************
Public Function OpenDialog(IniDir As String, Filter As String, _
FileName As String) As Integer
Dim OpenDir As String
'初期表示フォルダーの設定
If IniDir = "" Then
If Last_OpenDir = "" Then
'初回はExcelファイルのあるフォルダー
Last_OpenDir = ThisWorkbook.path
End If
OpenDir = Last_OpenDir
Else
OpenDir = IniDir
End If
SetCurrentDirectory OpenDir
FileName = Application.GetOpenFilename(FileFilter:=Filter)
If FileName = "False" Then
OpenDialog = 1
Exit Function
End If
'フォルダーを記憶
Last_OpenDir = Left(FileName, InStrRev(FileName, "\") - 1)
OpenDialog = 0
End Function
'*******************************************************************************
' ファイルを開くダイアログ (複数選択版)
' input : IniDir = 初期表示フォルダー (空なら最後に開いたフォルダー)
' Filter = ファイルフィルター (例:"CSVファイル (*.csv),*.csv")
' output : FileName = 複数ファイル名
' return : 0=成功 / 1=キャンセル
'*******************************************************************************
Public Function OpenDialog_Multi(IniDir As String, Filter As String, _
FileName As Variant) As Integer
Dim OpenDir As String
'初期表示フォルダーの設定
If IniDir = "" Then
If Last_OpenDir = "" Then
'初回はExcelファイルのあるフォルダー
Last_OpenDir = ThisWorkbook.path
End If
OpenDir = Last_OpenDir
Else
OpenDir = IniDir
End If
SetCurrentDirectory OpenDir
FileName = Application.GetOpenFilename(FileFilter:=Filter, _
MultiSelect:=True)
If Not IsArray(FileName) Then
OpenDialog_Multi = 1
Exit Function
End If
'フォルダーを記憶
Last_OpenDir = Left(FileName(1), InStrRev(FileName(1), "\") - 1)
OpenDialog_Multi = 0
End Function
'*******************************************************************************
' 名前を付けて保存ダイアログ
' input : IniDir = 初期表示フォルダー (空なら最後に保存したフォルダー)
' IniFileName = 初期表示ファイル名 (空でもいい)
' Filter = ファイルフィルター (例:"CSVファイル (*.csv),*.csv")
' output : FileName = ファイル名
' return : 0=成功 / 1=キャンセル
'*******************************************************************************
Public Function SaveDialog(IniDir As String, IniFileName As String, _
Filter As String, FileName As String) As Integer
Dim SaveDir As String
'初期表示フォルダーの設定
If IniDir = "" Then
If Last_SaveDir = "" Then
'初回はExcelファイルのあるフォルダー
Last_SaveDir = ThisWorkbook.path
End If
SaveDir = Last_SaveDir
Else
SaveDir = IniDir
End If
SetCurrentDirectory SaveDir
FileName = Application.GetSaveAsFilename(InitialFileName:=IniFileName, _
FileFilter:=Filter)
If FileName = "False" Then
SaveDialog = 1
Exit Function
End If
'フォルダーを記憶
Last_SaveDir = Left(FileName, InStrRev(FileName, "\") - 1)
SaveDialog = 0
End Function
'**********************************************************************
' フォルダー選択ダイアログ
' input : IniDir = 初期表示フォルダー (空だと最後に開いたフォルダーになる)
' output : SelectDir = 選択したフォルダー
' return : 0=成功 / 1=キャンセル
'**********************************************************************
Public Function SelectDialog(IniDir As String, SelectDir As String) As Integer
Dim OpenDir As String
'初期表示フォルダーの設定
If IniDir = "" Then
'初期表示フォルダーの指定なし > 前回開いたフォルダー
If Last_SelectDir = "" Then
'初回はExcelファイルのあるフォルダー
Last_SelectDir = ThisWorkbook.path
End If
OpenDir = Last_SelectDir
Else
OpenDir = IniDir
End If
OpenDir = OpenDir + "\"
SetCurrentDirectory OpenDir
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "フォルダーを選択"
.ButtonName = "選択"
.InitialFileName = OpenDir
If .Show = True Then
SelectDir = .SelectedItems(1)
Else
SelectDialog = 1
Exit Function
End If
End With
'フォルダーを記憶
Last_SelectDir = SelectDir
SelectDialog = 0
End Function
コメント