Microsoft Access 掲示板

フォルダ選択ダイアログでフォルダの中のファイル一覧を見たい

9 コメント
views
4 フォロー

Accessのフォームでフォルダを選択する際に、Application.FileDialog(msoFileDialogFolderPicker)を利用しています。ただ、この方法では、選ぼうとしているフォルダにどんなファイルが存在するかを見ることができません。(できませんか?)
フォルダを選択するダイアログで、選ぼうとしているフォルダに存在するファイルの一覧を表示するにはどうすればよいでしょうか。

kitasue
作成: 2023/06/18 (日) 08:11:43
通報 ...
1

ファイル選択ダイアログで、ファイルを選択して、結果からファイル名を取り除くぐらいしかないような気がします。

2
kitasue 2023/06/18 (日) 21:24:29 5eced@12e91

hatenaさん、ご回答ありがとうございます。
ユーザーの要望が強い場合は、その方法を提案したいと思います。

3
hiroton 2023/06/19 (月) 10:43:24 81e39@f966d

どうしてもやるとするなら自前でオリジナルのフォームを作る感じですかねぇ

https://www.google.com/search?q=ACCESS+treeview

フォルダを追いかけるツリービューとフォルダを選択(ツリービュー上のアイテムをクリック)したときにそのフォルダ内のファイル一覧を表示するリストボックスを組み合わせるとかで実現できると思います


リンクつけようとしたらなんか掲示板に怒られてしまいました。URLコピペしてください

5

前者、URL直書き
後者、MarkDown記法で記述
どちらもエラーなく貼り付けできました。

掲示板オーナーだけ許可ということだろうか?

8
hiroton 2023/06/19 (月) 22:38:47 65a33@2ee8f >> 4

https://www.google.com/search?q=ACCESS treeview

https://www.google.com/search?q=ACCESS+treeview

あぁ、URL貼り付けるときはわざわざリンクの表記する必要なかったってだけですね
画像1

6
kitasue 2023/06/19 (月) 15:57:38 5eced@12e91

hirotonさん、ご回答ありがとうございます。参考にさせていただきます。

7
hiroton 2023/06/19 (月) 18:06:39 81e39@f966d

面白そうなネタだったのでちょっとやってみました

「fFolderPicker」フォームを作成します
ActiveXコントロールから
・「Microsoft TreeView Control, version 6.0」:TreeView
・「Microsoft Forms 2.0 TextBox」:TextBox
を配置します
「TextBox」はWordWrapプロパティを「いいえ」にします

'//標準モジュール:MyFolderPicker
Option Compare Database
Option Explicit

Const defaultPath = "C:"
Public returnString As String

Function folderPicker(Optional folderPath As String)

    If folderPath = "" Or Dir(folderPath, vbDirectory) = "" Then folderPath = defaultPath
    
    returnString = ""
    DoCmd.OpenForm "fFolderPicker", , , , , acDialog, folderPath
    folderPicker = returnString

End Function
'//フォーム:fFolderPicker
Option Compare Database
Option Explicit

Dim fso As Object

Private Sub Form_Close()
    Set fso = Nothing
    MyFolderPicker.returnString = TreeView.SelectedItem.Key
End Sub

Private Sub Form_Load()
    Dim folderPath As String
    Dim folderName As String

    folderPath = OpenArgs
    folderName = Mid(OpenArgs, InStrRev(OpenArgs, "\") + 1)

    Set fso = CreateObject("Scripting.FileSystemObject")
    TreeView.Nodes.Add , , folderPath, folderName
    TreeView_NodeClick TreeView.Nodes(1)
End Sub

Private Sub TreeView_NodeClick(ByVal Node As Object)
    Dim files As String
    Dim file As Object
    For Each file In fso.GetFolder(Node.Key).files
        files = files & file.Name & vbCrLf
    Next
    Me.TextBox.Value = files

    If Node.Tag = "Done" Then Exit Sub

    Dim folder As Object
    For Each folder In fso.GetFolder(Node.Key).SubFolders
        TreeView.Nodes.Add Node.Key, tvwChild, folder.path, folder.Name
    Next

    Node.Tag = "Done"
    Node.Expanded = True
End Sub

手を抜けそうなところは抜きつつ、ですが、このあと、ダイアログとしての体裁を整えるのにさらに苦労することはまた別の話

9
kitasue 2023/06/25 (日) 09:12:14 5eced@12e91

hirotonさん
ユーザーの要望が強い場合は、実装させていただきます。
ご回答ありがとうございました!