Код указан ниже:
If Total_rows_NMRDTRSummary > 1 Then
Dim objConnection As Variant
Dim objRecordset As Variant
Dim connectionString As String
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Users\Sun-Lap\Desktop\Payroll Computations (Template).xlsm; Extended Properties=""Excel 8.0; HDR=YES"";"
objConnection.Open connectionString
For i = 2 To Total_rows_NMRDTRSummary
objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = '" & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 1) & "' AND Date = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 2), objConnection, adOpenStatic, adLockOptimistic, adCmdText
Do Until objRecordset.EOF
Debug.Print objRecordset.Fields.Item("Date"), _
objRecordset.Fields.Item("Person")
objRecordset.MoveNext
Loop
objRecordset.Close
Next i
End If
Проблема в том, что objRecordset.EOF
равно True
для всего For-next
l oop, что означает, что в рабочем листе N-MR Data
не найдено совпадений которая соответствует паре в N-MR DTR Summary
. Это странно, потому что те же столбцы Person
и Date
в N-MR DTR Summary
получены из листа N-MR Data
. И после проверки обе даты имеют числовой эквивалент c в Excel.
Часть с проблемой - это объект Recordset
:
objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = '" & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 1) & "' AND Date = " & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 2), objConnection, adOpenStatic, adLockOptimistic, adCmdText
Жесткое кодирование даты в эквивалент нумерации c будет соответствовать и будет работать правильно, но если это был в формате даты (как в предыдущем примере), он не будет возвращать никаких совпадений. Приведенный ниже код будет работать как положено:
objRecordset.Open "Select * FROM [N-MR Data$] WHERE Person = '" & ThisWorkbook.Worksheets("N-MR DTR Summary").Cells(i, 1) & "' AND Date = 43594", objConnection, adOpenStatic, adLockOptimistic, adCmdText