首页 > 解决方案 > 为什么这个循环返回重复的结果?

问题描述

我正在创建一些代码来遍历文件夹中的文件,并根据文件名中的发票编号删除不在查询中的文件。它基于我在这里找到的代码。问题是,当我使用 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 多个唯一的文件名而没有重复。

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

标签: vbams-access

解决方案


Debug.Print表达式在语句之外If,因此,它将为循环的每次迭代打印一个值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代替End Sub.


推荐阅读