我有一个超过16,000个文件的文件夹,我设法找到一些代码,在搜索所有文件时不会破坏Excel。现在我需要一些代码来导入最近3天的文本文件。任何帮助将不胜感激。
当前代码:
Sub ReadFilesIntoActiveSheet()
Dim fso As FileSystemObject
Dim folder As folder
Dim file As file
Dim FileText As TextStream
Dim TextLine As String
Dim Items() As String
Dim i As Long
Dim cl As Range
Dim dateToCheck As Date
Dim daysBack As Integer
Dim filesCheckd As Integer
filesChecked = 0
daysBack = 5
dateToCheck = DateAdd("d", -daysBack, Date)
Dim StrFile As String
StrFile = Dir("X:\TMS\TRUCK_OUT\")
Do While Len(StrFile) > 0
filesChecked = filesChecked + 1
StrFile = Dir
Loop
MsgBox filesChecked
Set FileText = Nothing
Set file = Nothing
Set folder = Nothing
Set fso = Nothing
End Sub
答案 0 :(得分:0)
我告诉你要使用的功能,你的回答是让我解释如何使用它。这意味着您对Excel VBA知之甚少,即使知道使用哪个函数也不足以在代码中添加两个额外的语句。
您必须花一些时间学习Excel VBA的基础知识。试图在不知道基础知识的情况下为您编写的宏可能会失败。如果你成功了,如果你每个问题只需要几行就会花费很长时间。
在互联网上搜索“Excel VBA教程”。有很多可供选择。或者,访问一个好的书店或图书馆,寻找Excel VBA Primers。还有很多可供选择。你投入学习基础知识的时间很快就会自我回报。
第1期
第一个声明是Dim fso As FileSystemObject
。只有在您的某个引用属于Microsoft Scripting RunTime
时才会编译。你不使用fso。你打算以后再用吗?为什么你使用Dir而不是你声明的文件夹对象的Files属性?
第2期
你是什么意思:“我设法找到一些代码,当它搜索所有文件时不会破坏Excel。”你有什么代码打破了Excel?
第3期
Dim daysBack As Integer
声明一个16位整数。除非你有一台旧的16位计算机,否则这将需要额外的处理。 Dim i As Long
声明一个32位整数,它是正确的选择。
第4期
Dir
返回Variant。 Dir$
返回一个字符串,速度更快。
上述问题都不是立即重要的。我试图展示一些你不了解的关于Excel VBA的小事以及当你不了解基础知识时等待抓住你的陷阱。
对于下面的宏版本,我有:
dateToCheck
之后具有上次修改日期的文件。这会让你更进一步。
Sub ReadFilesIntoActiveSheet()
'Dim fso As FileSystemObject
'Dim folder As folder
'Dim file As file
'Dim FileText As TextStream
'Dim TextLine As String
'Dim Items() As String
'Dim i As Long
'Dim cl As Range
Dim dateToCheck As Date
Dim daysBack As Integer
Dim filesCheckd As Integer
Dim StrFile As String
Dim PathRoot As String
filesChecked = 0
daysBack = 5
dateToCheck = DateAdd("d", -daysBack, Date)
PathRoot = "X:\TMS\TRUCK_OUT\"
StrFile = Dir$(PathRoot)
Do While Len(StrFile) > 0
If FileDateTime(PathRoot & StrFile) < dateToCheck Then
filesChecked = filesChecked + 1
End If
StrFile = Dir$
Loop
MsgBox filesChecked
'Set FileText = Nothing
'Set file = Nothing
'Set folder = Nothing
'Set fso = Nothing
End Sub