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

(私はちょうどに置き換えIsNullますIsEmpty

于 2013-03-08T19:55:55.727 に答える