Найти и заменить значение в таблице из нескольких критериев DLookup VBA - PullRequest
1 голос
/ 02 мая 2020

Я начинаю заниматься программированием в Access, и мне действительно нужна помощь !!

Моя цель - создать модуль, который запускается в таблице "tbCustoProjeto", и переписать значения поля "Valor HH" основанный на Dlookup. Я нашел какое-то решение (от azurous), которое, я думаю, решит эту проблему, но когда я запускаю код, возвращается

"object-required-error".

Sub redefineHH()
Dim objRecordset As ADODB.Recordset
Set objRecordset = New ADODB.Recordset
Dim i As Integer
Dim value As Variant
Dim HHTotal As Double
Set HHTotal = DLookup("[CustoTotalNivel]", "tbNivelNome2", "nUsuario='" & tbCustoProjeto!NumUsuario & "'" & "AND Numeric<=" & tbCustoProjeto!DataNumero)

'initated recordset obejct
objRecordset.ActiveConnection = CurrentProject.Connection
Call objRecordset.Open("tbCustoProjeto", , , adLockBatchOptimistic)
'find the target record
While objRecordset.EOF = False
'If objRecordset.Fields.Item(13).value > 0 Then
objRecordset.Fields.Item(13).value = HHTotal
objRecordset.UpdateBatch
'exit loop
'objRecordset.MoveLast
objRecordset.MoveNext
'End If
Wend
MsgBox ("Pesquisa Finalizada")
End Sub

Печать tbCustoProjeto

enter image description here

Печать tbNivelNome2

enter image description here

Пожалуйста, кто-то может сказать мне, где ошибка? Я не знаю, что делать.

1 Ответ

0 голосов
/ 03 мая 2020

Невозможно напрямую ссылаться на таблицу для параметра Dynami c. DLookup должен получить динамические критерии c из набора записей и в пределах l oop. Не используйте разделители апострофов для параметра поля числового типа.

Удалите ненужную конкатенацию.

Sub redefineHH()
Dim objRecordset As ADODB.Recordset
Set objRecordset = New ADODB.Recordset
objRecordset.Open "tbCustoProjeto", CurrentProject.Connection, , adLockBatchOptimistic
While objRecordset.EOF = False
    objRecordset.Fields.Item(13) = DLookup("[CustoTotalNivel]", "tbNivelNome2", _
        "nUsuario=" & objRecordset!NumUsuario & " AND Numeric <=" & objRecordset!DataNumero)
    objRecordset.UpdateBatch
    objRecordset.MoveNext
Wend
MsgBox ("Pesquisa Finalizada")
End Sub
...