ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教一个批量导出多个mdb中特定表至excel的问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-3-31 10:55 | 显示全部楼层 |阅读模式
需要将几百个 mdb 中的特定的一张表(假定为 sel )导出到 excel,最好是以原 mdb 的文件名作为工作簿名分别保存

不会vba……搜索也没发现类似的应用

access 那边完全抓瞎,只会右键导出……

excel 这边有也数据导入的功能录成了宏也不知如何修改成批量导出

求达人指点,谢谢

TA的精华主题

TA的得分主题

发表于 2016-3-31 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
问题似乎不太难,请模拟效果上传附件

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-3-31 12:06 | 显示全部楼层
谢谢z大

模拟了一个简单的情况附件

目标是想把 dir 文件夹下的所有 mdb (附件里就做了两个) 中的 x 表分别导出到 dir 文件夹下的同名 xlsx 中

运行在 dir 文件夹下的 vba工作簿 后,在 dir 文件夹下生成 database1.xlsx 和 database2.xlsx,里面都只有对应的 x 表的内容

这样不知道表述清楚了没有

再次感谢

dir.zip

55.64 KB, 下载次数: 59

TA的精华主题

TA的得分主题

发表于 2016-3-31 17:14 | 显示全部楼层
wanderary 发表于 2016-3-31 12:06
谢谢z大

模拟了一个简单的情况附件

不好意思,下午有事儿刚回来
请参考:
Sub 批量生成工作簿()
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim rst As ADODB.Recordset
    Dim Fso As New FileSystemObject
    Dim oFile As File
    Dim SQL$, p$, sFile$, wb As Workbook
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    p = ThisWorkbook.Path & "\"
    For Each oFile In Fso.GetFolder(p).Files
        If oFile.Name Like "*.accdb" Then
            Set cnn = New ADODB.Connection
            cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & oFile
            Set rs = cnn.OpenSchema(adSchemaTables)
            n = 0
            Do Until rs.EOF
                If rs.Fields("TABLE_TYPE") = "TABLE" Then
                    n = n + 1
                    s = rs("TABLE_NAME").Value
                    Set rst = New ADODB.Recordset
                    SQL = "select * from " & s
                    rst.Open SQL, cnn, adOpenKeyset, adLockOptimistic
                    
                    If n = 1 Then
                        Set wb = Workbooks.Add(xlWBATWorksheet)
                    Else
                        wb.Sheets.Add After:=wb.Sheets(n - 1)
                    End If
                    wb.Sheets(n).Name = s
                    For i = 1 To rst.Fields.Count
                        wb.ActiveSheet.Cells(1, i) = rst.Fields(i - 1).Name
                    Next
                    wb.ActiveSheet.Range("A2").CopyFromRecordset rst
                End If
                rs.MoveNext
            Loop
            wb.SaveAs Replace(oFile, "accdb", ".xlsx")
            wb.Close
        End If
        
    Next
    rs.Close
    rst.Close
    cnn.Close
    Set rs = Nothing
    Set rst = Nothing
    Set cnn = Nothing
    Set Fso = Nothing
    Application.ScreenUpdating = True
    MsgBox "ok"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-3-31 17:15 | 显示全部楼层
本帖最后由 zhaogang1960 于 2016-3-31 17:19 编辑

请测试附件
dir.rar (56.16 KB, 下载次数: 120)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-3-31 18:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
上面使用常规法生成工作簿,下面代码使用ADO直接生成工作簿,但有个小问题,如果工作表名为c 或 r时,打开工作簿时会提示有错误,下面代码遇到c 或 r时后面加上一个“表”:
Sub ADO直接生成工作簿()
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim Fso As New FileSystemObject
    Dim oFile As File
    Dim myTable As String
    Dim myPath As String
    Dim SQL$, n&, sh$
    For Each oFile In Fso.GetFolder(ThisWorkbook.Path).Files
        If oFile.Name Like "*.accdb" Then
            Set cnn = New ADODB.Connection
            cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & oFile
            Set rs = cnn.OpenSchema(adSchemaTables)
            n = 0
            Do Until rs.EOF
                If rs.Fields("TABLE_TYPE") = "TABLE" Then
                    n = n + 1
                    myTable = rs("TABLE_NAME").Value
                    If UCase(myTable) = "C" Or UCase(myTable) = "R" Then sh = myTable & "表" Else sh = myTable '打开ADO生成名为C或R的工作表时会提示有错,Excel2010可以纠错
                    myPath = Replace(oFile, "accdb", "xlsx")
                    If n = 1 Then If Dir(myPath) <> "" Then Kill myPath
                    SQL = "SELECT * INTO [Excel 12.0 xml;Database=" & myPath & ";]." & sh & " FROM " & myTable
                    cnn.Execute SQL
                End If
                rs.MoveNext
            Loop
        End If
    Next
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
    Set Fso = Nothing
    MsgBox "ok"
End Sub

TA的精华主题

TA的得分主题

发表于 2016-3-31 18:38 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-1 09:07 | 显示全部楼层

非常感谢z大

才发现我上传的附件格式是 accdb,但实际上碰到的都是 mdb(不熟悉 Access 犯的错……实在不好意思)

另外这个 xlsm 执行后直接提取出了所有的表,但因为我的每个 mdb 里面都有几十张表,所以我想指定特定的表,比方说在 xlsm 里或者 vba 代码里填入表的名称,然后执行后就导出这一张表到工作簿里,最终结果是每个工作簿里都只有一张工作表,附件里的就是 x

请问z大这两个问题如何修改

dir2.zip

49 KB, 下载次数: 37

TA的精华主题

TA的得分主题

发表于 2016-4-1 09:36 | 显示全部楼层
wanderary 发表于 2016-4-1 09:07
非常感谢z大

才发现我上传的附件格式是 accdb,但实际上碰到的都是 mdb(不熟悉 Access 犯的错……实 ...

Sub ADO直接生成工作簿() 'mdb
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim Fso As New FileSystemObject
    Dim oFile As File
    Dim myTable As String
    Dim Mypath As String
    Dim SQL$, n&, sh$
    myTable = InputBox("请输入导出数据表名")
    If myTable = "" Then Exit Sub
    For Each oFile In Fso.GetFolder(ThisWorkbook.Path).Files
        If oFile.Name Like "*.mdb" Then
            Mypath = Replace(oFile, "mdb", "xls")
            If Dir(Mypath) <> "" Then Kill Mypath
            Set cnn = New ADODB.Connection
            cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & oFile
            If cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, myTable, Empty)).EOF Then
                MsgBox myTable & "表" & "不存在,请重新输入。", vbInformation
                Exit For
            End If
            SQL = "SELECT * INTO [Excel 8.0;Database=" & Mypath & ";]." & myTable & " FROM " & myTable
            cnn.Execute SQL
        End If
    Next
    cnn.Close
    Set cnn = Nothing
    Set Fso = Nothing
    MsgBox "ok"
End Sub

TA的精华主题

TA的得分主题

发表于 2016-4-1 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请测试附件
dir2.rar (44.26 KB, 下载次数: 126)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 04:39 , Processed in 0.050479 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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