|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub test1() '纯练习一下,仅供测试……
-
- Worksheets("订单汇总表").Activate
- ActiveSheet.UsedRange.Offset(1).ClearContents
- Application.ScreenUpdating = False
-
- Dim ar, br, cr, Conn As Object, dict As Object, rs As Object
- Dim strConn As String, strFields As String, SQL As String, tb As String
- Dim A As String, B As String, C As String, i As Long, j As Long
-
- Set dict = CreateObject("Scripting.Dictionary")
- Set Conn = CreateObject("ADODB.Connection")
-
- If Application.Version < 12 Then
- strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=YES';Data Source="
- Else
- strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=YES';Data Source="
- End If
- Conn.Open strConn & ThisWorkbook.FullName
-
- For j = 1 To Worksheets.Count
- With Worksheets(j)
- If .Name Like "*库表明细" Then
- tb = .Name & "$A2:H" & .Range("A:H").Find("*", , xlValues, , xlByRows, xlPrevious).Row
- If strFields = "" Then
- strFields = Join(.[B2:F2&""], ",")
- A = "SELECT DISTINCT " & strFields & " FROM "
- End If
- i = InStr(.Name, "入库")
- A = A & IIf(i, "(", " UNION ALL ") & "SELECT " & strFields & " FROM [" & tb & "]" & IIf(i, "", ")")
- If i Then
- B = "SELECT " & strFields & ",SUM(入库数量) AS 入库总数量 FROM [" & tb & "] GROUP BY " & strFields
- Else
- C = "SELECT " & strFields & ",SUM(出库数量) AS 出库总数量 FROM [" & tb & "] GROUP BY " & strFields
- SQL = "SELECT 出库日期,SUM(出库数量) AS 出库总数量 FROM [" & tb & "] GROUP BY 出库日期"
- End If
- If Len(B) > 0 And Len(C) > 0 Then Exit For
- End If
- End With
- Next
-
- ar = Conn.Execute(SQL).GetRows
- For i = 0 To UBound(ar, 2)
- dict.Add CDate(Replace(ar(0, i), ".", "/")), i
- Next
-
- br = Split(strFields, ",")
- cr = br
- For i = 0 To UBound(br)
- br(i) = "a." & br(i) & "=b." & br(i)
- cr(i) = "a." & cr(i) & "=c." & cr(i)
- Next
-
- strFields = "123 AS 序号,a.*,NULL AS 订单数量,b.入库总数量,c.出库总数量,b.入库总数量-c.出库总数量 AS 库存数量"
- SQL = "SELECT " & strFields & " FROM ((" & A & ") a LEFT JOIN (" & B & ") b ON " & Join(br, " AND ") & ") LEFT JOIN (" & C & ") c ON " & Join(cr, " AND ")
- Set rs = Conn.Execute(SQL)
-
- With Range("A1")
- For i = 0 To rs.Fields.Count - 1
- .Offset(, i) = rs.Fields(i).Name
- Next
- .Offset(1).CopyFromRecordset rs
- With .Offset(, i)
- br = Range(.Offset(1), .End(xlToRight))
- For j = 1 To UBound(br, 2)
- If dict.Exists(br(1, j)) Then br(2, j) = ar(1, dict(br(1, j)))
- Next
- .Resize(UBound(br), UBound(br, 2)) = br
- End With
- End With
-
- rs.Close
- Set rs = Nothing
- Conn.Close
- Set Conn = Nothing
- Set dict = Nothing
- Application.ScreenUpdating = True
- Beep
- End Sub
复制代码 |
|