|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub test0() '
-
- Dim p As String
- ' With Application.FileDialog(msoFileDialogFolderPicker)
- ' .InitialFileName = ThisWorkbook.Path
- ' If .Show Then p = .SelectedItems(1) Else Exit Sub
- ' End With
- ' If Right(p, 1) <> "\" Then p = p & "\"
- p = ThisWorkbook.Path & "\"
-
- Dim s As String, f As String, strConn As String, SQL As String
- Dim i As Long, j As Long, k As Long, pos As Long
-
- s = "Excel 12.0;HDR=NO;Database="
- If Application.Version < 12 Then
- s = Replace(s, "12.0", "8.0")
- strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;HDR=NO';Data Source="
- Else
- strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties='Excel 12.0;HDR=NO';Data Source="
- End If
-
- f = Dir(p & "*.xls?")
- While Len(f)
- If p & f <> ThisWorkbook.FullName Then
- k = k + 1
- SQL = SQL & " UNION ALL SELECT '" & Split(f, ".xls")(0) & "',* FROM [" & s & p & f & "].[$A4:D] WHERE F3 IS NOT NULL"
- End If
- f = Dir
- Wend
- If k = 0 Then Exit Sub
- ' DoApp False
- Dim ar, br, Conn As Object, dict As Object
- Set dict = CreateObject("Scripting.Dictionary")
- Set Conn = CreateObject("ADODB.Connection")
-
- With Worksheets("全镇汇总表")
- .Activate
- With .Range("A1").CurrentRegion
- .Offset(4).ClearContents
- ar = .Resize(49, 14).Value
- End With
- End With
-
- k = 4
- For j = 3 To UBound(ar, 2)
- If Len(ar(k, j)) Then s = ar(k, j) Else s = ar(k - 1, j)
- dict.Add Replace(s, Chr(10), ""), j
- Next
- s = vbNullString
-
- Conn.Open strConn & ThisWorkbook.FullName
- br = Conn.Execute(Mid(SQL, 12)).GetRows
-
- For j = 0 To UBound(br, 2)
- If br(0, j) <> s Then
- s = br(0, j)
- k = k + 1
- ar(k, 1) = k - 4
- ar(k, 2) = s
- End If
- For i = 1 To UBound(br) Step 2
- If Not IsNull(br(i, j)) Then If dict.Exists(br(i, j)) Then ar(k, dict(br(i, j))) = br(i + 1, j)
- Next i, j
-
- k = k + 1
- For i = 5 To k - 1
- For j = UBound(ar, 2) - 2 To UBound(ar, 2) - 1
- ar(k, j) = ar(k, j) + Val(ar(i, j))
- ar(k, UBound(ar, 2)) = ar(k, UBound(ar, 2)) + Val(ar(i, j))
- Next j, i
- ar(k, 1) = k - 4
- ar(k, 2) = "合计"
-
- Range("A1").Resize(k, UBound(ar, 2)) = ar
-
- Conn.Close
- Set Conn = Nothing
- Set dict = Nothing
- ' DoApp
- Beep
- End Sub
复制代码 |
|