Vba 更新每个记录的结果
我有一个excel表格,其中有两列number1和number2。对于每次迭代,我需要从单元格中获取数字1和数字2并添加它,我需要更新第三列中的添加结果,即结果。我正在尝试使用OLE DB方法实现这一点,但所有单元格中都会更新相同的结果。请查找下面的代码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
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将光标从新的当前记录向前移动一条记录。