ダイアログで選択したファイルまたはフォルダを取得する
フィルタ設定
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' ダイアログ選択結果取得
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
' フィルタ設定
'------------------------------------------------------------------------------
Public Function F_File_ReturnFilterInfAdd( _
ByRef aInfAryAry As Variant, _
ByVal aName As String, _
ByVal aFilter As String) As Variant
Dim wkInf(D_IDX_START To PE_FILE_IDX_FILTER_INF_EEND) As Variant
If aFilter <> "" Then
wkInf(PE_FILE_IDX_FILTER_INF_NAME) = aName
wkInf(PE_FILE_IDX_FILTER_INF_FILTER) = aFilter
F_File_ReturnFilterInfAdd = M_Common.F_ReturnArrayAdd(aInfAryAry, wkInf)
End If
End Function
複数選択
'------------------------------------------------------------------------------
' 複数選択
'------------------------------------------------------------------------------
Public Function F_File_GetDialogSelectArray( _
ByRef aRtnAry As Variant, _
Optional ByVal aFilDlgType As MsoFileDialogType = msoFileDialogFilePicker, _
Optional ByVal aCrntFld As String = "", _
Optional ByVal aFilterInfAry As Variant = Empty) As Boolean
F_File_GetDialogSelectArray = PF_File_GetDialogSelectArray_Sub(aRtnAry, aFilDlgType, aCrntFld, aFilterInfAry, True)
End Function
' サブルーチン
Private Function PF_File_GetDialogSelectArray_Sub( _
ByRef aRtnAry As Variant, _
ByVal aFilDlgType As MsoFileDialogType, _
ByVal aCrntFld As String, _
ByVal aFilterInfAry As Variant, _
ByVal aMultiSlctFlg As Boolean) As Boolean
Dim wkRtnAry As Variant
Dim wkTmpAry As Variant, wkTmp As Variant
'カレントフォルダ設定
F_File_MoveCurrentFolder aCrntFld
'ダイアログ表示
With Application.FileDialog(aFilDlgType)
'フィルタ設定
.Filters.Clear
If aFilDlgType = msoFileDialogFolderPicker Then
'フォルダは無視
Else
With .Filters
If IsArray(aFilterInfAry) = True Then
For Each wkTmpAry In aFilterInfAry
.Add wkTmpAry(PE_FILE_IDX_FILTER_INF_NAME), wkTmpAry(PE_FILE_IDX_FILTER_INF_FILTER)
Next wkTmpAry
Else
.Add "すべてのファイル", "*.*"
End If
End With
.FilterIndex = 1
End If
'複数ファル選択許可
.AllowMultiSelect = aMultiSlctFlg
'ダイアログ表示
If .Show <> 0 Then
'キャンセル以外はパスを返却
For Each wkTmp In .SelectedItems
wkRtnAry = M_Common.F_ReturnArrayAdd(wkRtnAry, wkTmp)
Next
End If
End With
If IsArray(wkRtnAry) = True Then
aRtnAry = wkRtnAry
PF_File_GetDialogSelectArray_Sub = True
End If
End Function
単数選択
'------------------------------------------------------------------------------
' 単数選択
'------------------------------------------------------------------------------
Public Function F_File_GetDialogSelect( _
ByRef aRtn As String, _
Optional ByVal aFilDlgType As MsoFileDialogType = msoFileDialogFilePicker, _
Optional ByVal aCrntFld As String = "", _
Optional ByVal aFilterInfAry As Variant = Empty) As Boolean
Dim wkRtnAry As Variant
If PF_File_GetDialogSelectArray_Sub(wkRtnAry, aFilDlgType, aCrntFld, aFilterInfAry, False) <> True Then
Exit Function
End If
aRtn = wkRtnAry(LBound(wkRtnAry))
F_File_GetDialogSelect = True
End Function