VBA WHILE / WEND Loop Обновление предыдущей строки - PullRequest
0 голосов
/ 25 сентября 2019

Я обновляю MS Access, используя цикл While / Wend в зависимости от условия.Похоже, что запрос обновляет предыдущую запись в моей таблице, что не соответствует критериям цикла, а не обновляет фактическую запись , которая соответствует критериям.

Этот разделкода имеет идентификатор, который я использую для обновления 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!Я думаю, это как-то связано с моей петлей, которую я не могу понять.

Надеясь, что кто-то там может помочь!

1 Ответ

0 голосов
/ 25 сентября 2019

Переменная myid всегда указывает на ячейку A2.Если вы хотите, чтобы цикл возвращал идентификатор на основе текущей строки, вам нужно изменить строку myid = rr.Offset(0, 0).Value.

, поскольку rr указывает на A2, а r начинается со значения 2, возможно, вам нужно

myid = rr.Offset(r-1, 0).Value

Или инициализируйте r с 1 и просто сделайте

myid = rr.Offset(r, 0).Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...