2014-03-28 59 views
0

有人可以告诉我,如果用户可以在输入框中输入两个单独的日期,然后在文件夹中搜索具有(理想情况下)创建落入输入日期之间的日期的文件?如何在两个日期之间搜索文件?

我可以通过文件夹中的文件进行搜索,但文件数量每天都在增加,并且运行搜索所需的时间越来越长。我希望如果用户可以选择日期范围,那么这将减少运行时间。

如果这是不可能的,可以设置一个宏来搜索文件夹中的文件从最近创建的文件开始搜索,然后从那里开始工作?

Sub UKSearch() 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'Search function to find specific consignment number from multiple intake sheets' 
'Used by Traffic Office               ' 
'Created by *********** 11/03/14  Password to unlock = *********    ' 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

Dim FSO As Object 'FileSystemObject 
Set FSO = CreateObject("scripting.filesystemobject") 
Dim Directory As String 
Dim FileName As String 
Dim varCellvalue As Long 

Application.ScreenUpdating = False 
MsgBox ("This may take a few minutes") 

'value to be searched 
varCellvalue = Range("D13").Value 

'Change the directory below as needed 
Directory = "\\*******\shared$\Common\Returns\*********\" 
If Right(Directory, 1) <> "\" Then 
    Directory = Directory & "\" 
End If 

'Search for all files in the directory with an xls* file type. 
FileName = Dir(Directory & "*.xls*") 

'''''''''''''''''''''''' 
'Opens, searches through and closes each file 
Do While FileName <> "" 
OpenFile = Directory & FileName 
Workbooks.Open (OpenFile) 

Workbooks(FileName).Activate 

'Count through all the rows looking for the required number 
ActiveWorkbook.Sheets("UK Scan Sheet").Activate 
LastRow = Range("B65536").End(xlUp).Row 

intRowCount = LastRow 

Range("B1").Select 

For i = 1 To intRowCount 
    'If the required number is found then select it and stop the search 
    If ActiveCell.Value = varCellvalue Then 
     GoTo Finish 
     Else 
    End If 
ActiveCell.Offset(1, 0).Select 
Next i 

Workbooks(FileName).Close 
FileName = Dir 
OpenFile = "" 
Loop 
'''''''''''''''''''''''''' 

Finish: 

Application.ScreenUpdating = False 

End Sub 
+0

我不确定你的目标是什么,但如果你想获得日期过滤的文件名集合,你可能会从[本视频]中获得一些灵感(http://www.teachexcel.com/excel -tutorials/N-1566,VBA的提示---列表档案-IN-A-Folder.html)? –

+0

你可以看看如何确定创建日期这个答案:http://stackoverflow.com/questions/18660818/excel-vba-pdf-file-properties/18661886#18661886。尝试将它合并到您的代码中,如果您遇到困难,请回复并且我们会为您提供帮助 –

+0

我会尽量做得更清楚: - 我想要做的是 - 用户按下命令按钮 - 输入框日期(YYYY-MM-DD) - 第二日期的输入框(YYYY-MM-DD) - 搜索值的输入框 - 宏在两个输入日期之间的文件夹中查找第一个文件 - 宏搜索该文件中的搜索值 - 如果未找到,则移动到下一个文件,直到到达两个输入日期之间的最后一个文件。 我希望能让我更清楚自己想做什么? – LuckySevens

回答

1

添加到您的昏暗区段:

Dim oFile 

你的循环加载之前:

Set oFile = CreateObject("Scripting.FileSystemObject") 

在循环打开文件中添加一个if语句之前:

if oFile.getFile(Directory & FileName).DateCreated >= EarliestDate and oFile.getFile(Directory & FileName).DateCreated <= LatestDate 

您也可以使用oFile.getFile(目录& FileName).DateLastModified - 如果您想使用文件的上次更改日期而不是创建日期。

相关问题