这是我的功能不起作用。它永远不会进入删除调用,因为if语句永远不会计算为true,我无法弄清楚原因。
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
答案 0 :(得分:2)
可能是您定义fso
Set fso = CreateObject ("Scripting.FileSystemObject")
然后使用objFSO
objFSO.DeleteFolder folder, True
并在您的脚本中的其他地方设置On Error Resume Next
(除非您知道完全您正在做什么和<,否则永远使用它/ strong>有合理的错误处理代码。
一些附注(与实际问题无关,但值得考虑):
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
答案 1 :(得分:0)
您的陈述
createdDate = FormatDateTime(folder.DateCreated, "2")
是错误的,有风险的,没有必要的。第二个参数 -
NamedFormat可选。表示日期/时间的数字值 使用的格式。如果省略,则使用vbGeneralDate。
是数字,应该通过预定义的常量vbGeneralDate
,...来提供。
结果字符串是否正确转换为DateDiff()
所需的日期是一个悬而未决的问题。所以使用一致类型的
If (DateDiff("d", folder.DateCreated, Date) > maxAgeInDays) Then
问题的另一个可能原因是DateDiff()'
语义:
如果date1指的是比date2更晚的时间点,则DateDiff 函数返回负数。
你以maxAgeInDays
传递了什么?