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

フォルダパスの取得

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

ポイント

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

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

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


サンプルコード

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

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 lngCount
    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 / フォルダ

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.