2017-02-20 5 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

Вы можете сохранить результаты Dir() в массиве, сортировать этот массив в новый и затем использовать этот массив. – R3uK

+0

@ R3uK Как я могу это сделать? Если я просто использую Dir (path), это не просто даст мне место, а не содержимое? И в этом случае, если у меня есть массив, как я могу получить к нему доступ с моим текущим кодом (который просто использует строку)? – DGMS89

ответ

0

добавить команду сортировки, когда вы поставили все имена файлов в столбце А

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

Работает отлично, большое спасибо. – DGMS89

Смежные вопросы