フォルダパスの取得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 / フォルダ