|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub 读取数据()
- Dim oConn As Object, oRS As Object, sSQL As String, sWhere As String
- Dim vData As Variant, nRow As Long, nCol As Long
- Dim vDep As Variant, vProj As Variant, dicProj As Object
-
- With Sheet2
- vData = .[C1:C2].Value
- sWhere = "Where [日期] Between #" & Format(vData(1, 1), "yyyy-mm-dd") & "# And #" & Format(vData(2, 1), "yyyy-mm-dd") & "#"
- vData = Application.WorksheetFunction.Transpose(.[B5:B12].Value)
- vData = Replace("'|" & Join(vData, "|") & "|'", "标段费用|", "")
- sWhere = sWhere & " And (" & vData & " Like '%|'+[科目2]+'|%' Or [科目2] Like '标段费用%')"
- vProj = .[B5:B12].Value
- vData = Replace("'|" & Join(Application.WorksheetFunction.Transpose(vProj), "|") & "|'", "标段费用|", "")
- sWhere = sWhere & " And (" & vData & " Like '%|'+[科目2]+'|%' Or [科目2] Like '标段费用%')"
- vDep = Application.WorksheetFunction.Transpose(Application.WorksheetFunction.Transpose(.[C4:R4].Value))
- vData = "'|" & Join(vDep, "|") & "|'"
- sWhere = sWhere & " And " & vData & " Like '%|'+[部门]+'|%' "
-
- sSQL = "Select IIF([科目2] Like '标段费用%','标段费用',[科目2])"
- For nRow = 1 To UBound(vDep)
- sSQL = sSQL & ",Sum(IIf([部门]='" & vDep(nRow) & "',[借方]-[贷方],0)) as " & vDep(nRow)
- Next
- sSQL = sSQL & " From [会计分录] " & sWhere & " Group By IIF([科目2] Like '标段费用%','标段费用',[科目2]) "
- Set oConn = CreateObject("adodb.connection")
- oConn.Open "Provider=Microsoft.ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\GWGG.accdb"
- Set oRS = oConn.Execute(sSQL)
- If Not (oRS.EOF And oRS.BOF) Then
- vData = oRS.GetRows
- Set dicProj = CreateObject("Scripting.Dictionary")
- For nRow = 0 To UBound(vData, 2)
- dicProj(vData(0, nRow)) = nRow
- Next
- ReDim Preserve vProj(1 To UBound(vProj), 1 To 1 + UBound(vData))
- For nRow = 1 To UBound(vProj)
- vDep = vProj(nRow, 1)
- If dicProj.Exists(vDep) Then
- For nCol = 2 To UBound(vProj, 2)
- If Not IsNull(vData(nCol - 1, dicProj(vDep))) Then vProj(nRow, nCol) = vData(nCol - 1, dicProj(vDep))
- Next
- End If
- Next
- End If
- .[B5].Resize(UBound(vProj), UBound(vProj, 2)) = vProj
- oRS.Close
- oConn.Close
- Set oRS = Nothing
- Set oConn = Nothing
- End With
- End Sub
复制代码 |
|