よくあるファイルを開くダイアログ、名前を付けてダイアログの他、パスの処理を行うサンプルコードです。
'*******************************************************************************
' ファイル制御
'*******************************************************************************
'サーバー上のフォルダーを指定できるよう 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_open_dir As String
'最後に保存したフォルダー
Private last_save_dir As String
'*******************************************************************************
' ファイルを開くダイアログ
' input : ini_dir = 初期表示フォルダー (空なら最後に開いたフォルダー)
' filter = ファイルフィルター (例:"CSVファイル (*.csv),*.csv")
' file_name = [out] ファイル名
' return : 0=成功 / 1=キャンセル
'*******************************************************************************
Public Function OpenDialog(ini_dir As String, filter As String, _
file_name As String) As Integer
Dim open_dir As String
'初期表示フォルダーの設定
If ini_dir = "" Then
If last_open_dir = "" Then
'初回はExcelファイルのあるフォルダー
last_open_dir = ThisWorkbook.Path
End If
open_dir = last_open_dir
Else
open_dir = ini_dir
End If
SetCurrentDirectory open_dir
file_name = Application.GetOpenFilename(FileFilter:=filter)
If file_name = "False" Then
OpenDialog = 1
Exit Function
End If
'フォルダーを記憶
last_open_dir = Left(file_name, InStrRev(file_name, "\") - 1)
OpenDialog = 0
End Function
'*******************************************************************************
' ファイルを開くダイアログ (複数選択版)
' input : ini_dir = 初期表示フォルダー (空なら最後に開いたフォルダー)
' filter = ファイルフィルター (例:"CSVファイル (*.csv),*.csv")
' files_name = [out] 複数ファイル名
' return : 0=成功 / 1=キャンセル
'*******************************************************************************
Public Function OpenDialog_Multi(ini_dir As String, filter As String, _
files_name As Variant) As Integer
Dim open_dir As String
'初期表示フォルダーの設定
If ini_dir = "" Then
If last_open_dir = "" Then
'初回はExcelファイルのあるフォルダー
last_open_dir = ThisWorkbook.Path
End If
open_dir = last_open_dir
Else
open_dir = ini_dir
End If
SetCurrentDirectory open_dir
files_name = Application.GetOpenFilename(FileFilter:=filter, _
MultiSelect:=True)
If Not IsArray(files_name) Then
OpenDialog_Multi = 1
Exit Function
End If
'フォルダーを記憶
last_open_dir = Left(files_name(1), InStrRev(files_name(1), "\") - 1)
OpenDialog_Multi = 0
End Function
'*******************************************************************************
' 名前を付けて保存ダイアログ
' input : ini_dir = 初期表示フォルダー (空なら最後に保存したフォルダー)
' ini_file_name = 初期表示ファイル名 (空でもいい)
' filter = ファイルフィルター (例:"CSVファイル (*.csv),*.csv")
' file_name = [out] ファイル名
' return : 0=成功 / 1=キャンセル
'*******************************************************************************
Public Function SaveDialog(ini_dir As String, ini_file_name As String, _
filter As String, file_name As String) As Integer
Dim save_dir As String
'初期表示フォルダーの設定
If ini_dir = "" Then
If last_save_dir = "" Then
'初回はExcelファイルのあるフォルダー
last_save_dir = ThisWorkbook.Path
End If
save_dir = last_save_dir
Else
save_dir = ini_dir
End If
SetCurrentDirectory save_dir
file_name = Application.GetSaveAsFilename(InitialFileName:=ini_file_name, _
FileFilter:=filter)
If file_name = "False" Then
SaveDialog = 1
Exit Function
End If
'フォルダーを記憶
last_save_dir = Left(file_name, InStrRev(file_name, "\") - 1)
SaveDialog = 0
End Function
'*******************************************************************************
' ファイルの存在確認
' input : file_name = ファイル名 (フルパス)
' return : True = あり
' False = なし
' note :
'*******************************************************************************
Public Function Get_FileExists(file_name As String) As Boolean
If Dir(file_name) <> "" Then
Get_FileExists = True
Else
Get_FileExists = False
End If
End Function
'*******************************************************************************
' ファイルパスを取得
' input : file_name = ファイル名 (フルパス)
' return : ファイルパス
' note : "C:\Users\xxx\Documents\a.txt" ⇒ "C:\Users\xxx\Documents"
'*******************************************************************************
Public Function Get_FilePath(file_name As String) As String
Get_FilePath = Left(file_name, InStrRev(file_name, "\") - 1)
End Function
'*******************************************************************************
' ファイル名を取得
' input : file_name = ファイル名 (フルパス)
' return : ファイル名
' note : "C:\Users\xxx\Documents\a.txt" ⇒ "a.txt"
'*******************************************************************************
Public Function Get_FileName(file_name As String) As String
Get_FileName = Mid(file_name, InStrRev(file_name, "\") + 1)
End Function
'*******************************************************************************
' ファイルの拡張子を取得
' input : file_name = ファイル名 (フルパス)
' return : 拡張子
' note : "C:\Users\xxx\Documents\a.txt" ⇒ "txt"
'*******************************************************************************
Public Function Get_FileExt(file_name As String) As String
Get_FileExt = Right(file_name, Len(file_name) - InStrRev(file_name, "."))
End Function
'*******************************************************************************
' ファイルの更新日時を取得
' input : file_name = ファイル名 (フルパス)
' return : 更新日時
' note :
'*******************************************************************************
Public Function Get_LastWriteTime(file_name As String) As Date
Get_LastWriteTime = FileDateTime(file_name)
End Function
コメント