vba - 为什么这个循环返回重复的结果?
问题描述
我正在创建一些代码来遍历文件夹中的文件,并根据文件名中的发票编号删除不在查询中的文件。它基于我在这里找到的代码。问题是,当我使用 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 多个唯一的文件名而没有重复。
为什么此代码返回重复项?
解决方案
该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
.
推荐阅读
- c# - 实体框架和 ASP.NET MVC 应用程序的自定义 Linq 查询
- angular - 调用 auth0.com/oauth/token:在 Postman 中工作,而不是来自 Angular
- node.js - Node.JS:如何转发到带参数的登录页面?
- c++ - C++ 初始化列表与赋值
- jquery - 将 Jquery 数据表搜索结果传递给 ASP.NET MVC 控制器
- reactjs - 想修改道具但找不到
- php - 收集数组时在字符串上调用成员函数 getKey()
- azure-media-services - Microsoft.Azure.Management.Media .Net SDK 无法按名称获取/查找资产
- express - 如何使用节点、EJS、护照和会话有条件地从 2 个导航栏选项中呈现?
- r - as.Date 函数无法正确格式化数据集中的日期的问题