2017-02-20 23 views
0

フォルダ内のすべてのファイルを読み取り、ファイル名をワークシートに貼り付け、ファイル数をメッセージボックスに出力するコードがあります。VBAを使用してフォルダ内のファイルを並べ替える

問題:何らかの理由でコードを実行すると、誤った順序でファイルが取得される可能性があり、計算が壊れてしまいます(私は別のサブと同じです)。

質問:ファイルが常に正しい順序であることを保証する方法はありますか?

私がこれまで行ったこと:コードの出力前にファイル名を指定するために、フォルダ内のファイルを所定の順序で並べ替えるコードを使用したいと思いますが、 。

コード:

Sub Counter() 

Dim path As String, count As Integer, i As Long, var As Integer 
Dim ws As Worksheet 
Dim Filename As String 
Dim FileTypeUserForm As UserForm 
Dim x As String 

Application.Calculation = xlCalculationManual 

path = ThisWorkbook.path & "\*.*" 

Filename = Dir(path) 

ThisWorkbook.Sheets("FILES").Range("A:A").ClearContents 


x = GetValue 
If x = "EndProcess" Then Exit Sub 


Set ws = ThisWorkbook.Sheets("FILES") 
i = 0 
Do While Filename <> "" 
    var = InStr(Filename, x) 

    If var <> 0 Then 
     i = i + 1 
     ws.Cells(i + 1, 1) = Filename 
     Filename = Dir() 

    Else: Filename = Dir() 
    End If 

Loop 

Application.Calculation = xlCalculationAutomatic 

ws.Cells(1, 2) = i 

MsgBox i & " : files found in folder" 
End Sub 


Function GetValue() 
With FileTypeUserForm 
    .Show 
    GetValue = .Tag 
End With 
Unload FileTypeUserForm 
End Function 
+0

新しい配列に配列し、この配列を使用します。 – R3uK

+0

@ R3uKどうすればいいですか?私がDir(パス)を使用するだけでは、コンテンツではなく場所がわかりますか?その場合、配列がある場合、現在のコード(単に文字列を使用しています)でどのようにアクセスできますか? – DGMS89

答えて

0

はあなたが列内のすべてのファイル名を入れているとき、ソート命令を追加しますが、配列内のDir()の結果を並べ替え、この格納することができ

range("A1:A" & i).sort key1:=range("A1"),order1:=xlascending,header:=xlno 
+0

うまく動作し、多くのありがとう。 – DGMS89

関連する問題