ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

vba利用ado读取excel表格数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-1-26 11:51 | 显示全部楼层 |阅读模式
本帖最后由 桶哥 于 2018-1-26 11:55 编辑

公司采购部的采购订单是用excel表格做的,没有采购系统的支持,采购部一共6个采购员,数据非常得乱,一直以来,商品的采购价格都很难搞清除,想了很多办法,提取每张表格的商品信息。1、vba打开excel读取excel文件,这种方法需要打开excel表格,不是很方便。2、利用python读取excel,这种方法是最方便,不得不说python写这样的代码真心方便,但是部门里其他人都不会操作。能不能还是用vba读取excel表格,但是不打开excel表格,经过n天的努力,终于实现,第一次发帖,希望各位大佬多多指教。
Sub 读取Excel文件()                      'ado方式读取excel文件
    Dim ar, arr                                '定义动态数组
    Dim RowMax, Row, row1, RowMax1
    Dim conn, rs, SQL$, table$, table1$, SQL1$  
    Dim tiaoma$, num%
    Set conn = CreateObject("adodb.connection")      '创建connection对象连接excel,其实一直不太能搞懂connection和recordset。。。。。
    Set rs = CreateObject("adodb.recordset")            ’创建一个recordset对象,看到论坛里很多小伙伴读取数据都是用connection,刚开始我也是这么干
但是,我需要读取的订单文件不是标准的数据库文件,都不知道怎么用sql语句支持,后来采用的recordset对象,因为recordset有一个getrows的方法
    tiaoma = Format(Sheets("Sheet1").Cells(2, 7), "0000000000000000")       ’这一句的意思是在Cells(2, 7)表格输入需要查询的条形码,之所以用Format转化数据格式,因为采购做的订单里,有些条形码前面有一个0,但是公司的采购不会设置数据格式,所以干脆就统一位数
    mypath = "\\Sfgj\******\*******\******\订单\"                       '文件路径
    myfile = Dir(mypath & "*.xls")                                                   '获取文件名
    num = 1
    Do While myfile <> ""
        conn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=no;imex=1';Data Source = " & mypath & myfile
                                                                                                  ‘connection打开excel文件,创建连接
        table = "[订单导航页$]"                                                        ‘表的名称,这里这张表是订单的第一张表,里面存放着各个表的名称,话说,哪 位大佬教一下怎么用ado获取表的名称啊
        SQL = "select * from " & table                  
        rs.Open SQL, conn, 1, 1
        ar = rs.getrows                                                                    ’将表格数据放入到一个数组,这是我觉的这个方法的核心是吧表格数据转化程数 组数据进行分析
        rs.Close
        RowMax = UBound(ar, 2)                                                      ‘这个函数用于获取数值的下标,
            For Row = 1 To RowMax                                                   '提取table名称,这一步其实比较蛋疼,因为我不会直接读取sheets的名称。。。。。
                If ar(0, Row) <> "" Then
                    table1 = "[" & ar(0, Row) & "$]"
                    SQL1 = "select * from " & table1
                    rs.Open SQL1, conn, 1, 1
                    arr = rs.getrows
                    rs.Close
                    RowMax1 = UBound(arr, 2)    '从这里开始就是对每张表里的数据进行提取,
                    For row1 = 14 To RowMax1    '提取row数据,之所以是row1=14,因为每张表格从第15行开始就是商品数据
                        If tiaoma = Format(arr(2, row1), "0000000000000000") Then   ’format保证格式统一,然后循环写入到制定的单元格
                            Sheets("Sheet1").Cells(num + 1, 1) = arr(2, row1) '货号
                            Sheets("Sheet1").Cells(num + 1, 2) = arr(5, row1) '采购单价
                            Sheets("Sheet1").Cells(num + 1, 3) = arr(6, row1) '采购数量"
                            Sheets("Sheet1").Cells(num + 1, 4) = arr(1, 4)    '供应商名称
                            Sheets("Sheet1").Cells(num + 1, 5) = arr(11, 8)   '税点
                            Sheets("Sheet1").Cells(num + 1, 6) = ar(0, Row)   '日期
                            num = num + 1
                        End If
                    Next
                End If
            Next
        conn.Close                                   '关闭数据连接
        myfile = Dir
    Loop
    MsgBox "查询完毕"
    Set conn = Nothing '释放内存
    Set rs = Nothing
End Sub



评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-3-6 09:15 来自手机 | 显示全部楼层
老兄介不介意传个python代码,供学习下

TA的精华主题

TA的得分主题

发表于 2019-3-20 16:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-3-20 17:03 | 显示全部楼层
前一段时间也尝试用ado来读取数据,但是代码一直有问题,今天参考这个帖子,修改了一下自己的代码,一下就运行出来啦!
感谢楼主,哈哈,同楼上,能不能把Python代码也分享学习一下

TA的精华主题

TA的得分主题

发表于 2019-4-29 11:45 | 显示全部楼层
这个很有参考价值,我最近也在做类似的,能上传个附件看看吗,谢谢。

TA的精华主题

TA的得分主题

发表于 2019-6-21 21:10 来自手机 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 07:40 , Processed in 0.039477 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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