2016-10-05 3 views
0

フォルダからリストボックスに特定の順序でファイルのリストを追加しようとしています。 現時点では、エクスプローラビューのファイルを数値タグに基づいてソートし、各ファイルの名前をa(1).docx、a(2).docx、a(3).docxなどに変更します私の問題は、(10).docxと(11).docxをヒットしたときに起きます。順序はアルファベットで数値ではないからです。ファイルがリストボックスに入ると、a(1)、a(10)、a(11)、a(12)などの順に表示されます。 この注文上の問題を解決する簡単な方法はありますか? 私は、問題が解決ご覧最も簡単な方法は、ちょうど(01)、(02)などをdocxファイルは、ファイルを意図したとおりに、あなたのコードが動作する。この道に名前を付けることで、コードの抜粋リストボックス内のファイルをアルファベット順に番号順に並べ替える

Private Sub GetFiles(strFolder As String) 
    If Right(strFolder, 1) <> Chr(92) Then strFolder = strFolder & Chr(92) 
    On Error GoTo lbl_Exit: 
    sName = Dir$(strFolder) 
    Me.ListFiles.Clear   'ListFiles is my listbox 
    Do While sName <> "" 
     AddItems Me.ListFiles, sName, strFolder 
     sName = Dir$ 
    Loop 
lbl_Exit: 
    Exit Sub 
End Sub 

答えて

1

については、以下を参照してください。私にとっては、少なくとも;)

マルクス

OK、ので、ここで名前の変更ができない場合は、私が思いついたコードです:

Private Sub GetFiles(strFolder As String) 

    Dim DirArray() As Variant 
    ReDim Preserve DirArray(0 To 0) As Variant 

    Me.ListFiles.Clear 

    '---- Get the filenames into an array ---- 
    Dim sFileName As String 
    sFileName = Dir$(strFolder) 

    Do While sFileName <> vbNullString 

     DirArray(UBound(DirArray)) = sFileName 

     sFileName = Dir$ 

     If sFileName <> vbNullString Then 
      ReDim Preserve DirArray(0 To UBound(DirArray) + 1) As Variant 
     End If 
    Loop 

    '---- Sort the array ---- 
    Dim i As Integer 
    Dim j As Integer 

    Dim CompareTemp1 As String 
    Dim CompareTemp2 As String 

    For i = LBound(DirArray) To UBound(DirArray) 
     For j = i To UBound(DirArray) 

      '---- Compare two neighbouring filename-numbers 
      '---- If the one lower in the list has a lower number, they'll be switched around ---- 
      If GetNumbersFromFileName(CStr(DirArray(j))) < GetNumbersFromFileName(CStr(DirArray(i))) Then 

       '---- Change the neighbouring filenames order ---- 
       CompareTemp1 = DirArray(i) 
       CompareTemp2 = DirArray(j) 
       DirArray(i) = CompareTemp2 
       DirArray(j) = CompareTemp1 

      End If 
     Next j 
    Next i 
    '---- Once all this is done, the DirArray should have the desired order, with the undesireables on top ---- 

    '---- Display the new filename-order in your ListBox ---- 
    For i = 0 To UBound(DirArray) - 1 

     '---- Display only filenames with (##) ---- 
     If GetNumbersFromFileName(CStr(DirArray(i))) <> -1 Then 
      AddItems Me.ListFiles, (CStr(DirArray(i))), strFolder 
     End If 

    Next i 

    ReDim DirArray(0) As Variant 

End Sub 

Private Function GetNumbersFromFileName(sFileNameToCheck As String) As Integer 

    Dim iOpenBracketPosition As Integer 
    Dim iClosedBracketPosition As Integer 

    '---- Get the bracket-positions ---- 
    iOpenBracketPosition = InStr(1, sFileNameToCheck, "(") 
    iClosedBracketPosition = InStr(1, sFileNameToCheck, ")") 

    '---- In case one of the brackets is missing, the file will be pushed to the top ---- 
    If iOpenBracketPosition = 0 Or iClosedBracketPosition = 0 Then 
     GetNumbersFromFileName = -1 
     Exit Function 
    End If 

    '---- Return the Number in between the brackets ---- 
    GetNumbersFromFileName = CInt(Mid$(sFileNameToCheck, iOpenBracketPosition + 1, iClosedBracketPosition - iOpenBracketPosition - 1)) 

End Function 

希望いくつかの意味があります! 乾杯! マルクス

私はヒット一度のみ、(99)まで動作します
+0

(10)の後にソートされます(100)、その後(11)等...私はむしろ、複数の接頭辞がないと思います私のファイル名に0を... – Malteaser6900

+0

入手しました。いくつかのコードが完成しました。それは問題を解決するはずです。私は家で見通しがないので、今すぐテストすることはできません。私は明日あなたに戻ってきます! –

+0

だから。コードはそこにあり、うまくいくはずです!それが役に立てば幸い。 –

関連する問題