|
- Sub Test4()
- Dim Conn As Object, Rst As Object
- Dim strConn As String, strSQL As String
- Dim i As Integer, PathStr As String
- Set Conn = CreateObject("ADODB.Connection")
- Set Rst = CreateObject("ADODB.Recordset")
- PathStr = ThisWorkbook.FullName '设置工作簿的完整路径和名称
- Select Case Application.Version * 1 '设置连接字符串,根据版本创建连接
- Case Is <= 11
- strConn = "Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=" & PathStr
- Case Is >= 12
- strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & PathStr & ";Extended Properties=""Excel 12.0;HDR=YES"";"""
- End Select
- '设置SQL查询语句
- sql_1 = "(Select [商品名称],[商品代码],sum([入库数量]) as [入库数量],sum([入库金额]) as [入库金额] from [入库$] group by [商品名称],[商品代码]) B"
- sql_2 = "(Select [商品名称],[商品代码],sum([销售数量]) as [销售数量],sum([销售金额]) as [销售金额] from [出库$] group by [商品名称],[商品代码]) C"
- strSQL = "Select A.[商品名称],A.[商品代码],A.[期初数量],A.[期初金额],A.[销售单价],B.[入库数量],B.[入库金额],C.[销售数量],C.[销售金额],(A.[期初数量]+B.[入库数量]-C.[销售数量]) as [库存数量],((A.[期初金额]+B.[入库金额]-C.[销售金额])/(A.[期初数量]+B.[入库数量]-C.[销售数量])) as [库存单价],(A.[期初金额]+B.[入库金额]-C.[销售金额]) as [库存金额]"
- strSQL = strSQL & " from ([期初$] A inner join " & sql_1 & " on A.[商品名称]=B.[商品名称] and A.[商品代码]=B.[商品代码]) inner join " & sql_2 & " on A.[商品名称]=C.[商品名称] and A.[商品代码]=C.[商品代码]"
- Conn.Open strConn '打开数据库链接
- Set Rst = Conn.Execute(strSQL) '执行查询,并将结果输出到记录集对象
- With Sheet7
- .Cells.Clear
- For i = 0 To Rst.Fields.Count - 1 '填写标题
- .Cells(1, i + 1) = Rst.Fields(i).Name
- Next i
- .Range("A2").CopyFromRecordset Rst
- .Cells.EntireColumn.AutoFit '自动调整列宽
- .Cells.EntireColumn.AutoFit '自动调整列宽
- End With
- Rst.Close '关闭数据库连接
- Conn.Close
- Set Conn = Nothing
- Set Rst = Nothing
- End Sub
复制代码 |
评分
-
1
查看全部评分
-
|