web-dev-qa-db-ja.com

VBA-フォルダーピッカー-開始場所の設定

ユーザーにフォルダーの選択を要求する小さなAccess VBAアプリケーションがあります。フォルダーピッカーを開始するパスをVBAに伝える方法があるかどうか疑問に思っていました。つまり、C:\data\formsでフォルダーピッカーを起動します。現在、以前使用されていたディレクトリから開始しているようです。フォルダピッカーがアクセスできるものを制限する方法もあります。したがって、C:\data内のすべてにアクセスできますが、C:内の他のすべてにはアクセスできません

12
Finklesteinn

私は長年にわたって次のコード(Not My Code)を正常に使用しています。

enter image description here

Sub Sample()
    Dim Ret

    '~~> Specify your start folder here
    Ret = BrowseForFolder("C:\")
End Sub

Function BrowseForFolder(Optional OpenAt As Variant) As Variant
     'Function purpose:  To Browser for a user selected folder.
     'If the "OpenAt" path is provided, open the browser at that directory
     'NOTE:  If invalid, it will open at the Desktop level

    Dim ShellApp As Object

     'Create a file browser window at the default folder
    Set ShellApp = CreateObject("Shell.Application"). _
    BrowseForFolder(0, "Please choose a folder", 0, OpenAt)

     'Set the folder to that selected.  (On error in case cancelled)
    On Error Resume Next
    BrowseForFolder = ShellApp.self.Path
    On Error GoTo 0

     'Destroy the Shell Application
    Set ShellApp = Nothing

     'Check for invalid or non-entries and send to the Invalid error
     'handler if found
     'Valid selections can begin L: (where L is a letter) or
     '\\ (as in \\servername\sharename.  All others are invalid
    Select Case Mid(BrowseForFolder, 2, 1)
    Case Is = ":"
        If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
    Case Is = "\"
        If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
    Case Else
        GoTo Invalid
    End Select

    Exit Function

Invalid:
     'If it was determined that the selection was invalid, set to False
    BrowseForFolder = False
End Function
24
Siddharth Rout

これが、私がいつも使っている手っ取り早い方法です。以下の関数は、ユーザーに開始したいフォルダを選択させるだけです-特定のパスへのアクセスを制限する最も簡単な方法は、おそらくあなたが望むパスに対して以下のGetFolderNameをチェックすることだと思います制限する.

If GetFolderName = "C:\" then 
  MsgBox("This folder is not for you buddy")
  Exit Sub
end if

また、私のコードではありません:)

Public Function GetFolderName(Optional OpenAt As String) As String
Dim lCount As Long

GetFolderName = vbNullString

With Application.FileDialog(msoFileDialogFolderPicker)
    .InitialFileName = OpenAt
    .Show
    For lCount = 1 To .SelectedItems.Count
        GetFolderName = .SelectedItems(lCount)
    Next lCount
End With
End Function
14

フォルダービューをユーザーに制限する必要がない場合は、FileDialogメソッドを使用することをお勧めします(シェルの呼び出しよりもインターフェイスがより直感的です)。詳細については、CPearsonのサイトで詳細を読むことができます。彼は、VBAを使用したフォルダーの参照に関する 長い記事 を持っています(複数の方法。FileDialogオプションは最後にあります)。

Function BrowseFolder(Title As String, _
    Optional InitialFolder As String = vbNullString, _
    Optional InitialView As Office.MsoFileDialogView = _
        msoFileDialogViewList) As String

Dim V As Variant
Dim InitFolder As String

With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = Title
    .InitialView = InitialView
    If Len(InitialFolder) > 0 Then
        If Dir(InitialFolder, vbDirectory) <> vbNullString Then
            InitFolder = InitialFolder
            If Right(InitFolder, 1) <> "\" Then
                InitFolder = InitFolder & "\"
            End If
            .InitialFileName = InitFolder
        End If
    End If
    .Show
    On Error Resume Next
    Err.Clear
    V = .SelectedItems(1)
    If Err.Number <> 0 Then
        V = vbNullString
    End If
End With
BrowseFolder = CStr(V)
End Function

この関数は2つのパラメーターを取ります。最初のTitleは、ファイルダイアログで表示されるタイトルを指定する文字列です。 2番目のInitialFolder(オプション)は、ダイアログを開く初期フォルダーを指定します。 3番目のパラメーター(オプション)、InitialViewはビューの種類を指定します。このパラメーターの有効な値については、オブジェクトブラウザーのMsoFileDialogViewを参照してください。この関数は、ユーザーが選択した完全修飾フォルダー名、またはユーザーがダイアログをキャンセルした場合は空の文字列を返します。

6
ChE Junkie

これはもっと簡単な方法です。このコードスニペットにより、ユーザーはフォルダーを選択し、そのフォルダーアドレスを画面に出力できます。

Sub PrintSelectedFolder()
    Dim selectedFolder

    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        selectedFolder = .SelectedItems(1)
    End With

    'print to screen the address of folder selected
    MsgBox (selectedFolder)

End Sub
4
Matt C.

Macユーザーの場合:

Sub Select_Folder_On_Mac()
  Dim folderPath As String
  Dim RootFolder As String

  On Error Resume Next
  RootFolder = MacScript("return (path to desktop folder) as String")
  'Or use RootFolder = "Macintosh HD:Users:YourUserName:Desktop:TestMap:"
  folderPath = MacScript("(choose folder with Prompt ""Select the folder""" & _
     "default location alias """ & RootFolder & """) as string")
  On Error GoTo 0

  If folderPath <> "" Then
    MsgBox folderPath
  End If
End Sub

http://www.rondebruin.nl/mac/mac017.htm ;)から盗まれた

1
Sam