为什么此循环返回重复的结果?

时间:2019-09-18 17:19:22

标签: vba ms-access access-vba

我正在创建一些代码以遍历文件夹中的文件,并根据文件名中的发票编号删除查询中没有的文件。它基于我发现的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个以上唯一的文件名,且不重复。

为什么此代码返回重复项?

1 个答案:

答案 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