VBA调用sqlserver带参数的存储过程

今天,在工作的时候,一朋友提出了一个需求,在excel中根据物流单位的报价计算物流单位的总费用

序号 箱数 重量kg 到站 佳怡物流 兔兔快运
1 3 140.5 临沂    
2 56 260.7 莱西    
3 15 78 莱阳    
4 2 90 潍坊    
5 9 45 商河    
6 8 67 济阳    
7 11 18 枣庄    

~~~~~好多数据

为了描述方便,假设佳怡物流每公斤0.6元,兔兔快运每公斤0.7,莱阳兔兔快运因为某种原因不发货,佳怡能发货,保费兔兔快运每箱0.8元,佳怡每箱1元;我们计算报价公式

重量*X元/公斤+箱数*保费+其他费用

 

我首先将所有物流单位的报价根据某种格式都导到了sqlserver某个表中,然后写了一个存储过程,在excel中用alt+F11打开vba编程写了一个过程,返回总费用

Sub doSumFee()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim connStr As String, sqlStr As String
On Error Resume Next

connStr = "Provider=SQLOLEDB;Server=sql数据库名称或者IP,1433;Database=数据库名称;Uid=用户名;Pwd=密码;"
'MsgBox connStr
conn.Open connStr
Dim rowxh As Integer, colhx As Integer, ws As Worksheet


'sheet页的名称
Set ws = Sheets("sheet1")

'行数
For rowxh = 2 To 7

'列数
For colhx = 5 To 6
sqlStr = "exec proSelectWldwBj '" & ws.Cells(rowxh, 4).Value & "'," & ws.Cells(rowxh, 3).Value & "," & ws.Cells(rowxh, 2).Value & ", '" & ws.Cells(1, colhx).Value & "';"
'MsgBox sqlStr
rs.Open sqlStr, conn, adOpenStatic, adLockBatchOptimistic
'MsgBox rs.Fields(0).Value

ws.Cells(rowxh, colhx).Value = rs.Fields(0).Value

rs.Close
Set rs = Nothing
Next
Next
conn.Close
Set conn = Nothing
End Sub

然后再在excel中调用即可

猜你喜欢

转载自zhangshufei8001.iteye.com/blog/2377289