首页 > 解决方案 > 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 行的记录!我认为这与我的循环有关,我无法弄清楚。

希望有人可以提供帮助!

标签: excelvbams-accesswhile-loop

解决方案


该变量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

推荐阅读