0

这是问题所在:

我有一个包含许多文本文件的文件夹。我想找到我需要解析的文件;但是,它每次都有不同的名称,所以我不能使用文件名。我所知道的是它总是 39KB(虽然每次都略有不同,所以我检查 >39000 和 <40000)。但是,文件夹中经常有几个相同大小的文件,我想选择最近修改最多的一个。

是)我有的:

If fNewest = "" Then
      Set fNewest = objFile
    ElseIf fNewest.DateLastModified < objFile.DateLastModified Then
      Set fNewest = objFile
    End If

    If (objFile.Size > 39000 and objFile.Size < 40000) Then
      Msgbox fNewest
    End If

虽然 fNewest 返回我想要的文件的路径(最近修改的 39Kb 文件),但 Msgbox 被调用 4 次(这是该文件夹中 39Kb 文件的出现次数)。有谁知道我如何修改此代码以更正此问题,或运行此检查的更好方法?

我的终极目标是有一个如上所述的条件语句,因此 Msgbox 被替换为对获取该文件并解析它的特定函数的调用。

谢谢。

4

2 回答 2

2

您的嵌套已关闭。应该在您迭代文件夹中文件的MsgBox循环之外,并且分配应该在检查文件大小的条件内。试试这个:

Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder("...").Files
  If f.Size > 39000 and f.Size < 40000 Then
    If IsEmpty(newest) Then
      Set newest = f
    ElseIf newest.DateLastModified < f.DateLastModified Then
      Set newest = f
    End If
  End If
Next

If Not IsNull(newest) Then MsgBox newest.Name
于 2013-03-08T19:21:42.100 回答
1
Dim newest, fso
Set fso = CreateObject("Scripting.FileSystemObject")

For Each f In fso.GetFolder(".").Files
  If f.Size > 39000 and f.Size < 40000 Then
    If IsEmpty(newest) Then
      Set newest = f
    ElseIf newest.DateLastModified < f.DateLastModified Then
      Set newest = f
    End If
  End If
Next

If Not IsEmpty(newest) Then MsgBox newest.Name

(我只是替换IsNullIsEmpty

于 2013-03-08T19:55:55.727 回答