2

これが機能しない私の機能です。ifステートメントがtrueと評価されることはなく、その理由がわからないため、delete呼び出しに到達することはありません。

Function DeleteOldFolders(root, maxAgeInDays)

    Dim fso, ofolder, subFolders
    Set fso = CreateObject ("Scripting.FileSystemObject")

    If fso.FolderExists(root) Then

        Set ofolder = fso.GetFolder(root)
        Set subFolders = ofolder.SubFolders

        For Each folder in subFolders
            createdDate = FormatDateTime(folder.DateCreated, "2")

            If (DateDiff("d", createdDate, Date) > maxAgeInDays) Then

                objFSO.DeleteFolder folder, True

            End If
        Next

    End If

    Set objFSO = Nothing

End Function
4

2 に答える 2

2

何も削除されない理由は、おそらくあなたが定義することですfso

Set fso = CreateObject ("Scripting.FileSystemObject")

しかし、その後を使用しますobjFSO

objFSO.DeleteFolder folder, True

スクリプトのOn Error Resume Nextどこかに別の場所を置きます(自分が何をしているかを正確に理解していて適切なエラー処理コードが配置されていない限り、決してそれを使用しないでください)。

いくつかの補足事項(実際の問​​題とは関係ありませんが、検討する価値があります):

  • 常に使用してOption Explicitください。例外なし。
  • folder.DateCreatedで直接使用できますDateDiff()。値をフォーマットする必要はありません。
  • 関数は何も返さないので、プロシージャにすることをお勧めします。

手順の簡略化されたバージョンは、次のようになります。

Sub DeleteOldFolders(root, maxAgeInDays)
  Dim fso, folder

  Set fso = CreateObject("Scripting.FileSystemObject")

  If fso.FolderExists(root) Then
    For Each folder in fso.GetFolder(root).SubFolders
      If DateDiff("d", folder.DateCreated, Date) > maxAgeInDays Then
        folder.Delete True
      End If
    Next
  End If

  Set fso = Nothing
End Sub
于 2013-02-25T17:27:11.637 に答える
0

あなたの声明

createdDate = FormatDateTime(folder.DateCreated, "2")

間違っていて、危険で、不必要です。2番目のパラメータ-

NamedFormatオプション。使用される日付/時刻形式を示す数値。省略した場合、vbGeneralDateが使用されます。

数値であり、事前定義された定数vbGeneralDate、...を介して指定する必要があります。

結果の文字列が必要な日付に正しく変換されるかどうかDateDiff()は、未解決の問題です。したがって、一貫して型指定されたものを使用してください

If (DateDiff("d", folder.DateCreated, Date) > maxAgeInDays) Then

問題のもう1つの考えられる原因は、DateDiff()'セマンティクスです。

date1がdate2より後の時点を参照している場合、DateDiff関数は負の数を返します。

あなたは何として合格しましたmaxAgeInDaysか?

于 2013-02-25T17:21:54.357 に答える