Vba 更新每个记录的结果

Vba 更新每个记录的结果,vba,excel,adodb,Vba,Excel,Adodb,我有一个excel表格,其中有两列number1和number2。对于每次迭代,我需要从单元格中获取数字1和数字2并添加它,我需要更新第三列中的添加结果,即结果。我正在尝试使用OLE DB方法实现这一点,但所有单元格中都会更新相同的结果。请查找下面的代码 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Sub TestMacro() Sheets("Sheet1").Range("C2:D20").ClearContent

我有一个excel表格,其中有两列number1和number2。对于每次迭代,我需要从单元格中获取数字1和数字2并添加它,我需要更新第三列中的添加结果,即结果。我正在尝试使用OLE DB方法实现这一点,但所有单元格中都会更新相同的结果。请查找下面的代码

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Sub TestMacro()
Sheets("Sheet1").Range("C2:D20").ClearContents
DBPath = ThisWorkbook.FullName
sconnect = "Provider=MSDASQL.1;DSN=Excel Files;DBQ=" & DBPath & ";HDR=Yes;Option=3;"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.RecordSet")
select_query = "SELECT * FROM [Sheet1$]"
cn.Open sconnect
With rs
    .ActiveConnection = cn
    .Source = select_query
    .CursorType = adOpenKeyset
    .LockType = adLockOptimistic
    .CursorLocation = adUseServer
    .Open
End With
Do While Not rs.EOF


  num1 = rs.Fields(0).Value
  num2 = rs.Fields(1).Value
  rs.Fields(2).Value = num1 + num2
  rs.MoveNext

Loop
End Sub

如果你只是在寻找一个计算选项,那么:Range.calculate就是你所需要的。。。但是一个更简单的方法是假设你在做a+B=C列:

Dim LastRow As Long, CurRow As Long

LastRow = Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row

For CurRow = 2 to LastRow '(assumes col header in row 1)
    Cells(CurRow, 3).Formula = "=A" & CurRow & "+B" & CurRow
Next CurRow

我看不出有任何理由使用ADO来做这件事。另外,由于您已经初始化了Dim语句中的变量,所以您的2个Set语句是不必要的。您的计算是相同的。但我需要使用ADO记录集来实现它。这就是@chrismas007的要求。您是否尝试过清除变量num1和num2?在您的问题中,您是说第一行的值总和将应用于所有第三列值,而不是逐行进行吗?在ADO 2.5及更高版本中,当记录集已过滤或排序且当前记录的数据已更改时,调用MoveNext方法将光标从当前记录向前移动两条记录。这是因为当更改当前记录时,下一条记录将成为新的当前记录。更改后调用MoveNext将光标从新的当前记录向前移动一条记录。