我只想将最近3天的文本文件导入Excel

时间:2014-01-31 12:57:15

标签: excel excel-vba excel-2010 vba

我有一个超过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

1 个答案:

答案 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