ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] ADO将EXCEL导入ACCESS有选择地导入

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-4-11 16:30 | 显示全部楼层 |阅读模式
各位老师好,

本人工作遇到的问题求助各位老师,谢谢!
想要的结果是:
  1. 总表的按钮只提取  “发货记录表” 工作簿里的”发货类型“=”临时“的那条记录 对应的 ”订单号“,”发货日期“,”发往“ 的3列数据导入到ACCESS的数据表里
  2.  ACCESS的数据表是累积一年的数据的。“发货记录表”则每日有更新。
  3. 当同时有多个  “发货记录表”在文件夹时,将所有的“发货记录表”的临时发货记录都一起导入到ACCESS。
  4.  同一个货品的临时发货可能会重复出现。例如,订单号”0201615810“4月11日临时发货,可能它4月20日又回来了,然后4月30日又临时出库了。
  即,当导入数据到ACCESS时,用4月30日临时发货的那条数据覆盖4月11日临时发货的记录。用最新的数据覆盖旧的数据。

发货记录.zip

51.66 KB, 下载次数: 28

TA的精华主题

TA的得分主题

发表于 2016-4-12 09:35 | 显示全部楼层
请参考:
Sub Macro1()
    Dim Fso As Object, File As Object, cnn As Object, SQL$, arr, arrf$(), i&, j&, l&, u&, v&, n&, d As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    ReDim arrf(1 To Fso.GetFolder(ThisWorkbook.Path).Files.Count)
    For Each File In Fso.GetFolder(ThisWorkbook.Path).Files
        If File.Name Like "发货记录表*.xlsx" Then
            n = n + 1
            arrf(n) = File
        End If
    Next
    Set d = CreateObject("scripting.dictionary")
    Set cnn = CreateObject("adodb.connection")
    cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Database.accdb"
    For l = n To 1 Step -1
        SQL = "select 订单号,发货日期,发往 from [Excel 12.0;Database=" & arrf(l) & ";].[发货$c5:i] WHERE 订单号 is not null"
        Set rs = cnn.Execute(SQL)
        If Not rs.EOF Then
            arr = rs.GetRows
            For i = 0 To UBound(arr, 2)
                If Not d.Exists(arr(0, i)) Then
                    d(arr(0, i)) = ""
                    SQL = "select * from 临时 where 订单号='" & arr(0, i) & "'"
                    Set rs = CreateObject("adodb.Recordset")
                    rs.Open SQL, cnn, 1, 3
                    If rs.RecordCount = 0 Then
                        rs.AddNew
                        u = u + 1
                    Else
                        v = v + 1
                    End If
                    For j = 0 To rs.Fields.Count - 1
                        rs.Fields(j) = arr(j, i)
                    Next
                    rs.Update
                End If
            Next
        End If
    Next
    MsgBox "添加" & u & "条记录,更新" & v & "条记录。", vbInformation
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
    Set Fso = Nothing
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-4-12 09:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请测试附件
发货记录.rar (55.54 KB, 下载次数: 115)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-12 09:46 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

谢谢赵版。
有个问题是,当“发货类型”是“销售”时不需要导入到ACCESS里了。
也就是ACCESS里只有“发货类型”=“临时”的数据。

TA的精华主题

TA的得分主题

发表于 2016-4-12 09:59 | 显示全部楼层
Bettyexcel 发表于 2016-4-12 09:46
谢谢赵版。
有个问题是,当“发货类型”是“销售”时不需要导入到ACCESS里了。
也就是ACCESS里只有“发 ...

仅需修改一句:
SQL = "select 订单号,发货日期,发往 from [Excel 12.0;Database=" & arrf(l) & ";].[发货$c5:j] WHERE 发货类型='临时'"

TA的精华主题

TA的得分主题

发表于 2016-4-12 10:00 | 显示全部楼层
附件>>>>>>>>>>>>>>>>>>
发货记录.rar (55.96 KB, 下载次数: 44)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-12 10:43 | 显示全部楼层

赵版能执行,现在还有一个问题,ACCESS数据表的标题行需要改成英文的,EXCEL发货表的标题行是中文的,如何设定ACCESS的标题行,导入EXCEL时不要标题行?
我已经更改了ACCESS数据表的标题行了,劳烦您再看看?谢谢!

发货记录.zip

60.66 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2016-4-12 10:57 | 显示全部楼层
Bettyexcel 发表于 2016-4-12 10:43
赵版能执行,现在还有一个问题,ACCESS数据表的标题行需要改成英文的,EXCEL发货表的标题行是中文的,如 ...

SQL = "select * from 临时 where [Order]='" & arr(0, i) & "'"

TA的精华主题

TA的得分主题

发表于 2016-4-12 10:58 | 显示全部楼层
请测试附件
发货记录.rar (56.35 KB, 下载次数: 40)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-4-12 12:56 | 显示全部楼层

谢谢赵版。
还有一个问题,发货记录表的标题实际是这样的,更新了附件,别人的标题我没有权力更改,请您帮忙再看看,谢谢!

发货记录.zip

60.52 KB, 下载次数: 8

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 17:15 , Processed in 0.029112 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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