Hi,
In a standard module
'// ExcelFox.com created on 28-May-2011
Option Base 1
Public FileList() As String
Public FileCounter As Long
Public Enum SortType
Ascending = 1
Descending = 2
End Enum
Public Function GETFILELIST(ByVal FolderPath As String, ByVal Extn As String, _
Optional IncludeSubFolder As Boolean, _
Optional ByVal Criteria As String) As String()
Dim FileName As String
Dim strExtn As String
Dim blnSkipCrit As Boolean
If Right$(FolderPath, 1) <> "\" Then FolderPath = FolderPath & "\"
Extn = LCase$(Replace(Extn, ".", ""))
FileName = LCase$(Dir(FolderPath & "*." & Extn))
If Len(Criteria) Then
Criteria = LCase$(Criteria)
Else
blnSkipCrit = True
End If
FileCounter = 0
Do While Len(FileName)
strExtn = LCase$(Mid$(FileName, InStrRev(FileName, ".") + 1))
If strExtn Like Extn Then
If Not blnSkipCrit Then
If InStr(1, FileName, Criteria) Then
FileCounter = FileCounter + 1
ReDim Preserve FileList(1 To FileCounter)
'FileList(FileCounter) = FolderPath & FileName'file name with full path
FileList(FileCounter) = FileName
End If
Else
FileCounter = FileCounter + 1
ReDim Preserve FileList(1 To FileCounter)
FileList(FileCounter) = FileName
End If
End If
FileName = LCase$(Dir())
Loop
If IncludeSubFolder Then
SubFoldersFilesCount FolderPath, Extn, Criteria
End If
GETFILELIST = FileList
End Function
Private Sub SubFoldersFilesCount(ByVal Folder, ByVal Extn As String, _
Optional ByVal Criteria As String)
Dim objFSO As Object
Dim objFolder As Object
Dim strExtn As String
Dim blnSkipCrit As Boolean
If objFSO Is Nothing Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
End If
Set Folder = objFSO.GetFolder(Folder)
For Each SubFolder In Folder.SubFolders
Set objFolder = objFSO.GetFolder(SubFolder.Path)
For Each FileName In objFolder.Files
strExtn = LCase$(Mid$(FileName, InStrRev(FileName, ".") + 1))
If strExtn Like Extn Then
If Not blnSkipCrit Then
If InStr(1, LCase$(FileName.Name), Criteria) Then
FileCounter = FileCounter + 1
ReDim Preserve FileList(1 To FileCounter)
FileList(FileCounter) = FileName.Name
End If
Else
FileCounter = FileCounter + 1
ReDim Preserve FileList(1 To FileCounter)
FileList(FileCounter) = FileName.Name
End If
End If
Next
SubFoldersFilesCount SubFolder, Extn, Criteria
Next
End Sub
Function SORT_SDARRAY(ByRef SortData, ByVal SortBy As SortType)
Dim i As Long
Dim j As Long
Dim UB As Long
Dim UB1 As Long
Dim UB2 As Long
Dim tmp As Variant
Dim SDArr As Variant
If TypeOf SortData Is Range Then
If SortData.Rows.Count > 1 And SortData.Columns.Count = 1 Then
SDArr = Application.Transpose(SortData)
ElseIf SortData.Rows.Count = 1 And SortData.Columns.Count > 1 Then
SDArr = Application.Transpose(Application.Transpose(SortData))
ElseIf SortData.Rows.Count = 1 And SortData.Columns.Count = 1 Then
SORT_SDARRAY = SortData.Value2
Exit Function
Else
SORT_SDARRAY = CVErr(xlErrNA)
Exit Function
End If
Else
On Error Resume Next
UB1 = UBound(SortData, 1)
UB2 = UBound(SortData, 2)
On Error GoTo 0
If UB1 > 1 And UB2 = 1 Then
SDArr = Application.Transpose(SortData)
ElseIf UB1 = 1 And UB2 > 1 Then
SDArr = Application.Transpose(Application.Transpose(SortData))
ElseIf UB1 = 1 And UB2 = 1 Then
SORT_SDARRAY = SortData
Exit Function
ElseIf UB1 > 0 And (Len(UB2) = 0 Or UB2 = 0) Then
SDArr = SortData
Else
SORT_SDARRAY = CVErr(xlErrNA)
Exit Function
End If
End If
UB = UBound(SDArr)
If SortBy = Ascending Then
For i = 1 To UB
For j = i To UB
If SDArr(j) < SDArr(i) Then
tmp = SDArr(i)
SDArr(i) = SDArr(j)
SDArr(j) = tmp
End If
Next
Next
SORT_SDARRAY = SDArr
Else
For i = 1 To UB
For j = i To UB
If SDArr(j) > SDArr(i) Then
tmp = SDArr(i)
SDArr(i) = SDArr(j)
SDArr(j) = tmp
End If
Next
Next
SORT_SDARRAY = SDArr
End If
End Function
In userform module
Private Sub UserForm_Initialize()
Dim f, sf
f = GETFILELIST("\\corp.bloomberg.com\pn-dfs\global data\research-blaw-profiles\Common\Ask Bloomberg\Custom_Tools\DataSets\", ".xls*", 1, "")
sf = SORT_SDARRAY(f, Ascending)
Me.ComboBox1.List = sf
End Sub
HTH
Bookmarks