VBA WHILE / WEND循环更新前一行

问题描述 投票:0回答:1

我正在根据条件使用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行的记录!我认为这与我的循环有关,我无法弄清楚。

希望有人帮助您!

excel vba ms-access while-loop access-vba
1个回答
0
投票

变量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
© www.soinside.com 2019 - 2024. All rights reserved.