ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1848|回复: 18

[求助] ADO+SQL提取各月项目

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-4-3 07:11 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2015-4-3 07:49 编辑

提取各月项目,整列提取,指定列提取。

提取各月项目.rar

135.22 KB, 下载次数: 30

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-3 13:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-4-3 15:08 | 显示全部楼层
张雄友 发表于 2015-4-3 13:00
顶一下。。。。

提取各月项目.rar (136.42 KB, 下载次数: 25)
试试看是不是这样的

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-3 19:20 | 显示全部楼层
本帖最后由 张雄友 于 2015-4-3 19:28 编辑

附上03版附件。
Sub ADO提取工号姓名实发工资整列()
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim rst As ADODB.Recordset
    Dim SQL As String
    Dim i As Long
    Dim r As Long
    Dim m As Long
    Dim arr() As String
    Dim a As Variant
    Dim s As String
    Dim Temp As String
    Dim MyPath As String
    Dim MyName As String
    Dim shName As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = ThisWorkbook.Path & "\"
        If .Show = False Then Exit Sub
        MyPath = .SelectedItems(1) & "\"
    End With
    Application.ScreenUpdating = False
    Set d = CreateObject("scripting.dictionary")
    Set ds = CreateObject("scripting.dictionary")
    Cells.ClearContents
    Filepath = GetName(MyPath)
    For x = 0 To UBound(Filepath)
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Filepath(x)
    Application.ScreenUpdating = False
    a = Array("工号", "姓名", "实发工资")
    ActiveSheet.UsedRange.Offset(1).ClearContents
            Set rst = cnn.OpenSchema(adSchemaTables)
            Do Until rst.EOF
                If rst.Fields("TABLE_TYPE") = "TABLE" Then
                    shName = Replace(rst("TABLE_NAME").Value, "'", "")
                    If Right(shName, 1) = "$" Then
                        Set rs = cnn.Execute("select * from [" & shName & "]")
                        s = rs.Fields(1).Name
                        If Err.Number = 0 Then
                            Temp = "|" & rs.Fields(1).Name
                            For i = 2 To rs.Fields.Count - 1
                                Temp = Temp & "|" & rs.Fields(i).Name
                            Next
                            Temp = Temp & "|"
                            m = m + 1
                            If m > 49 Then
                                r = Range("A1").CurrentRegion.Rows.Count + 1
                                Range("A" & r).CopyFromRecordset cnn.Execute(Join(arr, " UNION ALL "))
                                m = 1
                                Erase arr
                            End If
                            ReDim Preserve arr(1 To m)
                            s = ""
                            For i = 0 To 2
                                If InStr(Temp, "|" & a(i) & "|") Then
                                    s = s & "," & a(i)
                                Else
                                    s = s & ",null as " & a(i)
                                End If
                            Next
                            arr(m) = "select '" & Filepath(x) & "' as 工作簿名,'" & Replace(shName, "$", "") & "' as 工作表名" & s & " from [Excel 12.0;Database=" & Filepath(x) & ";].[" & shName & "] where 工号 is not null"
                        Else
                            Err.Clear
                        End If
                    End If
                End If
                rst.MoveNext
        Loop
     Next
    SQL = Join(arr, " UNION ALL ")
    r = Range("A1").CurrentRegion.Rows.Count + 1
    Range("A" & r).CopyFromRecordset cnn.Execute(SQL)
    rs.Close
    rst.Close
    cnn.Close
    Set rs = Nothing
    Set rst = Nothing
    Set cnn = Nothing
    Application.ScreenUpdating = True
    MsgBox "OK!"
End Sub


Function GetName(lj As String) '遍历所有EXCEL文件
    Dim MyName, dic, Did, i, t, F, tt, MyFileName
    Set dic = CreateObject("Scripting.Dictionary")
    Set Did = CreateObject("Scripting.Dictionary")
    dic.Add (lj), ""
    i = 0
    Do While i < dic.Count
        Ke = dic.Keys
        MyName = Dir(Ke(i), vbDirectory)
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(i) & MyName) And vbDirectory) = vbDirectory Then
                    dic.Add (Ke(i) & MyName & "\"), ""
                End If
            End If
            MyName = Dir
        Loop
        i = i + 1
    Loop
    For Each Ke In dic.Keys
        MyFileName = Dir(Ke & "*.xls*")
        Do While MyFileName <> ""
            If MyFileName <> ThisWorkbook.Name Then Did.Add (Ke & MyFileName), ""
            MyFileName = Dir
        Loop
    Next
    GetName = Did.Keys
End Function




03版.rar

76.83 KB, 下载次数: 23

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-4 07:28 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-4 19:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
4楼是什么问题?

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-5 17:29 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-5 17:55 | 显示全部楼层
№①布鲑鲑 发表于 2015-4-3 15:08
试试看是不是这样的

当数据列数不一样时,与效果不一样。如2014年1月!

提取各月项目kk的.rar

143.65 KB, 下载次数: 12

TA的精华主题

TA的得分主题

发表于 2015-4-5 18:14 | 显示全部楼层
张雄友 发表于 2015-4-5 17:55
当数据列数不一样时,与效果不一样。如2014年1月!

有什么不一样

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-5 18:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
№①布鲑鲑 发表于 2015-4-5 18:14
有什么不一样

一共是要提取5列数,但执行后提取了6列 。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-22 18:49 , Processed in 0.051133 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表