トップ > 備忘録 > フォルダのパス取得・存在確認

フォルダパスの取得FileDiarogプロパティを使用したフォルダのパス取得   2012.11.10

フォルダのパスを取得する際に使用するFileDialogプロパティ。それを用いたコードとメモです。

ポイント

・FileDiarogプロパティ
・フォルダの存在確認

FileDialogプロパティの引数に「msoFileDialogFolderPicker」を設定しコードを実行すると、「参照」のダイアログが表示される。ダイアログではフォルダを選択でき、選択したフォルダは、SelectedItemsプロパティで、そのパスを取得できる。

何らかの理由で、フォルダの存在を確認するケースも考えられるので、Dir関数を用いたフォルダの存在確認方法を、補足として併記する。


【お薦め】マクロ・プロシージャを管理する無料のツール!
 Excelマクロ管理ツール

サンプルコード

選択したフォルダのパス表示とフォルダの存在確認

Sub Sample_Directory()
    Dim strDirPath As String
    Dim strExistDir As String
    strDirPath = Search_Directory()
    If Len(strDirPath) = 0 Then Exit Sub
    strExistDir = IsExistence_Directory(strDirPath)
    If Len(strExistDir) = 0 Then Exit Sub
    MsgBox "選択したフォルダは[" & strExistDir & "]"
End Sub

Function Search_Directory() As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then Search_Directory = .SelectedItems(1) End With End Function
Function IsExistence_Directory(ByVal DirPath As String) As String IsExistence_Directory = Dir(DirPath, vbDirectory) End Function

選択したフォルダ内の、全てのExcelファイルの、全てのワークシートに保護をかけるサンプルコード

Sub All_Books_Protect()
    Dim strDirPath As String
    Dim strExistDir As String
    strDirPath = Search_Directory()
    If Len(strDirPath) = 0 Then Exit Sub
    strExistDir = IsExistence_Directory(strDirPath)
    If Len(strExistDir) = 0 Then Exit Sub
    Call Search_Books(strDirPath)
End Sub

Private Function Search_Directory() As String With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then Search_Directory = .SelectedItems(1) End With End Function
Private Function IsExistence_Directory(ByVal DirPath As String) As String IsExistence_Directory = Dir(DirPath, vbDirectory) End Function
Private Sub Search_Books(ByVal strPath As String) Dim strTarget As String Dim strDirPath As String With Application strPath = strPath & .PathSeparator strTarget = Dir(strPath & "*.xls?") If strTarget = "" Then Exit Sub .ScreenUpdating = False Do With Workbooks.Open(strPath & strTarget) If SheetsProtect() Then .Save .Close End With strTarget = Dir() Loop Until strTarget = "" .ScreenUpdating = True strTarget = Dir("") End With End Sub
Private Function SheetsProtect() As Boolean Dim objWS As Worksheet With Application.ActiveWorkbook For Each objWS In .Worksheets With objWS If Not .ProtectContents Then .Protect Password:="pass" ' Else ' .Unprotect Password:="pass" End If End With Next End With SheetsProtect = True End Function

メモ

FileDiarogプロパティ

ファイルダイアログを表示する。引数により表示されるダイアログの種類が異なる。引数に設定できるのは、次のMsoFileDialogTypeクラスの定数のいずれか。

・msoFileDialogFilePicker 「参照」ダイアログでファイルを選択できます。
・msoFileDialogFolderPicker 「参照」ダイアログでフォルダを選択できます。
・msoFileDialogOpen 「ファイルを開く」ダイアログ
・msoFileDialogSaveAs 「名前をつけて保存」ダイアログ

ファイルダイアログは、ファイル(フォルダ)のパスを取得するものであり、「ファイルを開く」や「名前をつけて保存」のダイアログであっても、実際にファイルが開かれたり、保存されるものではない。

ダイアログで選択したファイル(フォルダ)パスの取得には、SelectedItemsプロパティを使用する。使用例は以下を参照。

Sub UseFileDialogOpen()
    Dim lngCount As Long
    ' ファイル ダイアログを開きます。
    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = True 'ファイルの複数選択を可能にする
        .Show
        ' 選択された各ファイルのパスを表示します。
        For lngCount = 1 To .SelectedItems.Count
            MsgBox .SelectedItems(lngCount)
        Next
    End With
End Sub

Dir関数

指定したパターンやファイル属性に一致する、ファイルやフォルダの名前の文字列を返す。返される文字列は(String型)。ドライブのボリュームラベルも取得可能。

構文:Dir[(pathname[, attributes])]

[pathname]
ファイル名を表す文字列式を指定。フォルダ名やドライブ名も含めて指定可能。
指定した内容が見つからないときは、長さ「0」の文字列を返す。

[attributes]
省略可能です。取得したいファイルの属性の値の合計、または定数を指定。
省略すると、標準ファイルの属性。Windowsでの「設定値」は以下の6つ
 【定数 / 値 / 内容】
vbNormal / 0 / 標準ファイル
vbReadOnly / 1 / 読み取り専用ファイル
vbHidden / 2 / 隠しファイル
vbSystem / 4 / システム ファイル
vbVolume / 8 / ボリューム ラベル。この値を指定すると、すべての属性は無効。
vbDirectory / 16 / フォルダ


ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.