Это будет делать то, что вы хотите.
У меня есть эта пара функций, которые я написал и использовать все время:
Function GetFilenamesMatchingPattern(ByVal pathPattern As String, _
Optional attributes As VbFileAttribute = vbNormal) As String()
Dim i As Long
Dim nFiles As Long
Dim filenames() As String
nFiles = CountFilesMatchingPattern(pathPattern, attributes)
If nFiles > 0 Then
ReDim filenames(1 To nFiles)
filenames(1) = dir(pathPattern, attributes)
For i = 2 To nFiles
filenames(i) = dir()
Next i
Else
'Return unallocated array
End If
GetFilenamesMatchingPattern = filenames
End Function
Function CountFilesMatchingPattern(ByVal pathPattern As String, _
Optional attributes As VbFileAttribute = vbNormal) As Long
Dim nFiles As Long
If dir(pathPattern, attributes) = "" Then
nFiles = 0
Else
nFiles = 1
Do While dir() <> ""
nFiles = nFiles + 1
Loop
End If
CountFilesMatchingPattern = nFiles
End Function
Извинения, если кто-то не нравится стиль!
Пример использование с шаблоном:
Dim filenames() As String
filenames = GetFilenamesMatchingPattern("C:\Users\myName\Documents\Book*.xlsm")
'returns an array of Strings:
'{"Book1.xlsm", "Book2.xlsm", "Book2_test.xlsm"}
Теперь для вашей конкретной проблемы, а именно получение различных подстановочных значения:
Dim i As Long
Dim filenames() As String
Dim wildcardValues() As String
Dim part1 As String
Dim part2 As String
part1 = "Book" ' yours would be "Provider_"
part2 = ".xlsm" ' yours would be "_extra.csv"
filenames = GetFilenamesMatchingPattern("C:\Users\myName\Documents\" _
& part1 & "*" & part2)
ReDim wildcardValues(LBound(filenames) To UBound(filenames))
For i = LBound(filenames) To UBound(filenames)
wildcardValues(i) = Replace(Replace(filenames(i), part1, ""), part2, "")
Next i
'wildcardValues is now:
'{"1", "2", "2_test"}
'Done.
насчет 'Debug.Print filename' || 'ActiveCell = FileName' –
@Mehow Это действительно сработало отлично :) - У меня есть вопрос - есть ли способ его пропустить, чтобы в случае присутствия нескольких файлов? Могу ли я просто добавить оператор if, который говорит как If filename <> "" - Loop до ISEMPTY? – mmichaelx
http://social.msdn.microsoft.com/Forums/office/en-US/ed24ba3d-3373-49cb-ab67-3dae4eecbe04/cycling-through-a-directory-in-vba?forum=accessdev - посмотрите на первое решение –