我必须在excel中编写一些VBA代码来配合我的VB.NET程序,我正在努力学习VBA的基础知识,因为我以前没有使用过它。我发现一些代码允许我从临时表中获取值,并将它们直接放入excel电子表格中的相应字段。我正在填写采购订单文档,因此传递的信息是小计、增值税、运费、总计等。
下面是我用来填充单个单元格的代码:
'get quantity
strQry = "SELECT quantity from [temp];"
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Open strQry
End With
'append data to document
Worksheets("PurchaseOrder").Range("D22").CopyFromRecordset rs
quantity = rs.Fields("quantity") 'setting the quatity in a variable
最后一行代码是我尝试在变量中存储数量的值,我需要使用它来计算小计,因为小计没有传递到excel。填充单元格的代码工作正常,它只是将数据放入变量中进行操作,这是我正在努力的。直接从数据库填充单元格工作正常,但我在最后一行得到了一个错误。
在变量中存储了数量之后,我还想在变量中存储单位成本,使用等价的子字符串删除开头的£符号,将其转换为小数,然后将单位成本乘以数量,得到小计。
我尝试使用以下代码:
'get price
strQry = "SELECT costPerUnit from [temp];"
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Open strQry
End With
'append data to document
Worksheets("PurchaseOrder").Range("N22").CopyFromRecordset rs
costPerUnit = Right(rs(0), Len(costPerUnit) - 1) 'setting the cost per unit in a variable
subtotal = costPerUnit * quantity
Worksheets("PurchaseOrder").Cells("Q47").Value = "£ " & subtotal
任何帮助我都感激不尽。谢谢。
3条答案
按热度按时间r7s23pms1#
好的,所以直到填充了记录集的,你已经做的很正确了,然后你必须看到记录集更像一个表,可以没有或者有多行多列。首先你必须检查查询是否返回了任何结果或者记录集是否是空的(
rs.BOF
和rs.EOF
为true)。然后,您将遍历行(rs.MoveNext
)。要访问单个值,您可以给予列的索引或列名。下面的示例循环遍历行和列,但也会在末尾再次提取列“quantity”:
k4ymrczo2#
记录集有一个游标,对记录集的任何引用都将根据游标的位置返回属性(如字段的值)。
当你调用CopyFromRecordset时,你把光标移到末尾(EOF = True),然后当你试图获取Fields(“quantity”)时,记录集没有活动的记录,所以你得到了一个错误。
如果你有正确类型的记录集,你可以先输入
rs.MoveFirst
,然后quantity就等于第一条记录的quantity字段,这可能不是你想要的。没有一行程序(据我所知)可以让你得到记录集中所有字段的总和,你必须像Graffl显示的那样循环。
更好的方法可能是使用Excel。Excel中已经有数据,因此插入公式以获得所需的分类汇总。
或者类似的东西。
ruoxqz4g3#
可以将记录集保存到数组
如下所示