В настоящее время я пытаюсь отредактировать макрос, который использует мой коллега, в настоящее время скрипт открывает окно сообщения, которое позволяет вам вводить строку, которая затем выполняется поиск и результаты вставляются в книгу. Я хотел бы изменить это, чтобы он искал список уже в электронной таблице, а затем для того, чтобы результаты были вставлены на следующем листе. Я не уверен, действительно ли это возможно или нет, и где моя основная борьба. Ниже приведен текущий код, я полагаю, все, что необходимо для переменного диапазона для размещения в том, что звездах «тзд =„Введите имя файла и расширение“Поиск файла каталога VBA с использованием списка в Excel
Sub Filesearch()
Dim myDir As String, temp(), myList, myExtension As String
Dim SearchSubFolders As Boolean, Rtn As Integer, msg As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show Then
myDir = .SelectedItems(1)
End If
End With
msg = "Enter File name and Extension" & vbLf & "following wild" & _
" cards can be used" & vbLf & "* # ?"
myExtension = Application.InputBox(msg)
If (myExtension = "False") + (myExtension = "") Then Exit Sub
Rtn = MsgBox("Include Sub Folders ?", vbYesNo)
SearchSubFolders = Rtn = 6
myList = SearchFiles(myDir, myExtension, 0, temp(), SearchSubFolders)
If Not IsError(myList) Then
Sheets(1).Cells(1).Resize(UBound(myList, 2), 2).Value = _
Application.Transpose(myList)
Else
MsgBox "No file found"
End If
End Sub
Private Function SearchFiles(myDir As String _
, myFileName As String, n As Long, myList() _
, Optional SearchSub As Boolean = False) As Variant
Dim fso As Object, myFolder As Object, myFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each myFile In fso.getfolder(myDir).Files
Select Case myFile.Attributes
Case 2, 4, 6, 34
Case Else
If (Not myFile.Name Like "~$*") _
* (myFile.Path & "\" & myFile.Name <> ThisWorkbook.FullName) _
* (UCase(myFile.Name) Like UCase(myFileName)) Then
n = n + 1
ReDim Preserve myList(1 To 2, 1 To n)
myList(1, n) = myDir
myList(2, n) = myFile.Name
End If
End Select
Next
If SearchSub Then
For Each myFolder In fso.getfolder(myDir).subfolders
SearchFiles = SearchFiles(myFolder.Path, myFileName, _
n, myList, SearchSub)
Next
End If
SearchFiles = IIf(n > 0, myList, CVErr(xlErrRef))
End Function
Конечно, возможно выполнить поиск из списка на листе. Однако, что этот список будет удерживать, поскольку в настоящее время у вас есть 3 входа от пользователей, то есть папки, FileMask & include вложенных папок. Предоставьте больше информации о том, что вы сделали до сих пор, и какие проблемы возникли. – EEM