0

このコードは、特定のフォルダーのファイル名をリストボックスに入力します

Dim DIRECTORY As String
DIRECTORY = Dir(myPath & "\*.xlsx", vbNormal)
Do Until DIRECTORY = ""
ListBox1.AddItem DIRECTORY
DIRECTORY = Dir()
Loop

しかし、私はソートされたリストが必要です。
最初にファイルを並べ替えてから、リストボックスにデータを入力するにはどうすればよいですか。
ところで、リストボックスのソートは(私が知っているように)長い手順です。

4

2 に答える 2

2

AListBoxにはソート機能が組み込まれていません。あなたはあなた自身を転がす必要があるでしょう。

基本的な考え方は、リストデータを配列に取得し、配列を並べ替えてから、データをリストに戻すことです。VBA配列を並べ替えるために利用できる多くの優れたリファレンスがあります。

非常に多くのファイルがない限り、単純な並べ替えでおそらく十分です。これを試して

Sub SortListBox(oLb As MSForms.ListBox)

Dim vItems As Variant
Dim i As Long, j As Long
Dim vTemp As Variant

'Put the items in a variant array
vItems = oLb.List

' Sort
For i = 0 To UBound(vItems, 1) - 1
    For j = i + 1 To UBound(vItems, 1)
        If vItems(i, 0) > vItems(j, 0) Then
            vTemp = vItems(i, 0)
            vItems(i, 0) = vItems(j, 0)
            vItems(j, 0) = vTemp
        End If
    Next
Next

'Clear the listbox
oLb.Clear

'Add the sorted array back to the listbox
For i = 0 To UBound(vItems, 1)
    oLb.AddItem vItems(i, 0)
Next

End Sub
于 2012-09-06T11:25:04.863 に答える
0

DIRコマンドは、常にアルファベット順にソートされた要素を表示しますが、タイプではなく名前でソートします。正しいことは、「vbDirectory」属性と「vbArchive」属性を利用して、最初にvbDirectoryでリストを作成し、次にvbArchiveで別のリストを作成することです。結果は、ディレクトリをファイルから分離する単一のアルファベット順にソートされたリストです。

ここに画像の説明を入力してください

Private Sub ListarFunc()
Dim a As Integer
Dim strArchivo As String
Dim FileName As String
Dim TipoArchivo As String
Dim fso As Object, file As Object, folder As Object
Set fso = CreateObject("Scripting.FileSystemObject")

On Error Resume Next
    
    'If we are not in /root add a "\" to the PathExplorer
    If Mid(Me.BoxPathExplorer, 4, 1) <> "" Then Me.BoxPathExplorer = CurDir() & "\"
    Me.Lista1.ForeColor = RGB(25, 25, 100)
    Me.Lista1.RowSource = ""    'First, clear the list
    Me.Lista1.AddItem "___________________ TIPO ___________________" & ";" & "________________ " & _
        Dir(Me.BoxPathExplorer, vbVolume) & " ________________"
            
    strArchivo = Dir(Me.BoxPathExplorer, vbDirectory)
    While strArchivo <> ""
        Set folder = fso.GetFolder(strArchivo)
        If folder.Attributes And vbDirectory Then Me.Lista1.AddItem folder.Type & ";" & strArchivo
        strArchivo = Dir
        Set folder = Nothing
    Wend

    strArchivo = Dir(Me.BoxPathExplorer, vbArchive)
    While strArchivo <> ""
        Set file = fso.GetFile(strArchivo)
        If file.Attributes And vbArchive Then Me.Lista1.AddItem file.Type & ";" & strArchivo
        strArchivo = Dir
        Set file = Nothing
    Wend
    
    If Lista1.ItemData(1) = "." Then Me.Lista1.RemoveItem 1            'Delete the item '.'
    Me.Lista1 = "NoSelection"
End Sub

よろしく。

于 2022-02-05T22:06:39.787 に答える