excel - VBA WHILE/WEND 循环更新上一行
问题描述
我正在根据条件使用 While/Wend 循环更新 MS Access。该查询似乎更新了我的表中不满足循环条件的上一条记录,并且没有更新满足条件的实际记录。
这部分代码具有我用来更新 Access 的标识符:
Dim rr As Range
Set rr = [a2]
本节增加行:
Dim r As Long
r = 2
现在,我正在检查,只要包含标识符的列 A 中的长度大于零,并且列 F 中的相应单元格包含“是”,执行 sql 查询:
While Len(Sheet2.Range("A" & r).Formula) > 0
If Sheet2.Range("F" & r).Value = "Yes" Then
myid = rr.Offset(0, 0).Value
qString = "UPDATE [table] SET [Status]= '" & statusvalue & "' WHERE [Key]='" & myid & "'"
cn.Execute qString, dbFailOnError
End If
r = r + 1
Wend
该查询很好地更新了数据库,只是它更新了不正确的记录。例如,如果第 2 行不包含“是”而第 3 行包含,则第 2 行的记录会在数据库中更新,而不是第 3 行的记录!我认为这与我的循环有关,我无法弄清楚。
希望有人可以提供帮助!
解决方案
该变量myid
始终指向单元格 A2。如果希望循环根据当前行返回 ID,则需要更改行myid = rr.Offset(0, 0).Value
。
由于rr
指向 A2 并r
从值 2 开始,也许你需要
myid = rr.Offset(r-1, 0).Value
或者用 1 初始化r
然后做
myid = rr.Offset(r, 0).Value
推荐阅读
- reactjs - 我的带有 React Router 的 React/Redux 网站甚至在 AWS(S3) 上都没有响应
- c++ - 无法让程序处理 WM_POWERBROADCAST 消息
- json - Pandas json_normalize 的逆
- visual-studio-code - 一种在 vscode 扩展开发中更快地查看代码更改结果的方法
- dia - 如何在dia中输入中文
- javascript - 世博会位置模块不返回速度
- reactjs - ReactJS/Typescript 升级将 Child 的类型从 any 更改为 ReactNode
- c - 为什么 %c 打印 '?' 它的含义是什么
- r - 如何更快地迭代和测试 R 中数据框的列?
- java - 命令失败:gradlew.bat installDebug