我正在创建一些代码以遍历文件夹中的文件,并根据文件名中的发票编号删除查询中没有的文件。它基于我发现的here代码。问题在于,当我使用Debug.Print来查看结果时,它会返回多个重复项,并且不会返回查询中未包含的所有文件。
Sub DeleteInvoices()
Dim strFile As String
Dim strPath As String
Dim TestStr As String
strPath = "E:\groups\folder\folder2\"
strFile = Dir("E:\groups\folder\folder2\*")
Do While Len(strFile) > 0
If IsNull(DLookup("[qry_InvPDFList]![Invoice#]", "qry_InvPDFList", "[qry_InvPDFList]![Invoice#] = " & QUOTE & Mid(strFile, 12, 6) & QUOTE)) Then
TestStr = strPath & strFile
End If
Debug.Print TestStr
strFile = Dir
Loop
EndSub
我希望它返回50个以上唯一的文件名,且不重复。
为什么此代码返回重复项?
答案 0 :(得分:2)
Debug.Print
表达式位于If
语句的外部之外,因此,它将为{{1 }}循环,始终打印Do
保留的最后一个值。
我建议将循环的内容更改为:
TestStr
您还有Do Until strFile = ""
If IsNull(DLookup("[Invoice#]", "qry_InvPDFList", "[Invoice#] = '" & Mid(strFile, 12, 6) & "'")) Then
TestStr = strPath & strFile
Debug.Print TestStr
End If
strFile = Dir
Loop
而不是EndSub
。