ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何用SQL语句获取Excel所有表名,请指导 !

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-4-23 21:54 | 显示全部楼层 |阅读模式
Provider=Microsoft.ACE.OLEDB.12.0; Data Source=D:\book.xls; Extended Properties=Excel 12.0;
我用ADODB连接excel后,如何用SQL语句获取表名
我就知道用SQL打开某个表的语句是:select * from [sheet1$],但我如何能用命令取到sheet1呢(因为不是所有表名都是默认的)?
如下图,我要用SQL语句获取到 表名1Sheet2表3
求指导,谢谢了!!
表名.jpg

TA的精华主题

TA的得分主题

发表于 2015-4-23 22:15 | 显示全部楼层
sheets(1).name    如此而已为何要用SQL来获取表名?

TA的精华主题

TA的得分主题

发表于 2015-4-23 22:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
搜一下就出来了,下面是zhaogang1960老师的代码。
  1. Sub 获取工作表名称OpenSchema法()
  2.     Dim cnn As Object, rst As Object, SQL$, Filename$, i&
  3.     Set cnn = CreateObject("ADODB.Connection")
  4.     Set rst = CreateObject("ADODB.Recordset")
  5.     Filename = Application.GetOpenFilename(filefilter:="Excel文件(*.xls),*.xls", Title:="选择Excel工作簿")
  6.     If Filename = "False" Then Exit Sub
  7.     cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Filename
  8.     Set rst = cnn.OpenSchema(20) 'adSchemaTables=20
  9.     i = 1
  10.     Cells(i, 1) = "指定工作簿的工作表名称:"
  11.     i = i + 1
  12.     Do Until rst.EOF
  13.         If rst.Fields("TABLE_TYPE") = "TABLE" Then
  14.             s = Replace(rst("TABLE_NAME").Value, "'", "") '表名含有“1月”等时有多余的单引号
  15.             If Right(s, 1) = "$" Then  '排除无效表名
  16.                 Cells(i, 1) = s
  17.                 i = i + 1
  18.             End If
  19.         End If
  20.         rst.MoveNext
  21.     Loop
  22.     rst.Close
  23.     Set rst = Nothing
  24.     cnn.Close
  25.     Set cnn = Nothing
  26. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-24 18:59 | 显示全部楼层
chxw68 发表于 2015-4-23 22:22
搜一下就出来了,下面是zhaogang1960老师的代码。

这个帖子我也搜到看过,我不懂VBA,我是其它编程语言,希望知道SQL语句查表名的方法,谢谢!!

TA的精华主题

TA的得分主题

发表于 2015-4-24 20:13 | 显示全部楼层
本帖最后由 自然秋儿 于 2015-4-24 21:55 编辑

Sub 按钮1_Click()

    Dim CDLG As Object, ADOX As Object, TableName As String, dbFile As String, strProvider As String, i
    Set CDLG = CreateObject("MSComDlg.CommonDialog") '控件提供一组标准的操作对话框,进行诸如打开和保存文件,设置打印选项,以及选择颜色和字体等操作。
    Set ADOX = CreateObject("ADOX.Catalog")  'Catalog它是ADOX的对象,包含数据源模式目录的集合
    With CDLG
        .DialogTitle = "查代EXCEL文件"
        .Filter = _
        "Excel File|*.xls"
        .ShowOpen
        dbFile = .Filename
    End With
    strProvider = "Driver={Microsoft Excel Driver (*.xls)}; DBQ=" & dbFile & ";"
    With ADOX
        .ActiveConnection = strProvider
        For i = 0 To .Tables.Count - 1   'Tables表示数据库表,包含列、索引和关键字
            TableName = .Tables(i).Name
            If Right$(TableName, 1) = "$" Then
              MsgBox "工作表名:" & Left$(TableName, Len(TableName) - 1)
            End If
        Next i
    End With
    Set CDLG = Nothing
    Set ADOX = Nothing

End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-4-24 20:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主良好的愿望,坐等高人解答,帮顶一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-24 22:01 | 显示全部楼层
本帖最后由 subp 于 2015-4-24 22:04 编辑

不好意思,主要是我没看懂VBA,其实重要在这一句代码上,谢谢各位,问题已解决.
Set rs=objconn.OpenSchema(querytype,criteria,schemaid)

定义和用法 (此段内容取自w3school)
OpenSchema 方法可返回 Recordset 对象,该对象包含有关数据源的模式信息。举例,schema 信息可包括表的名称,表中的列名,每列的数据类型。Recordset 将以只读、静态游标模式打开。

TA的精华主题

TA的得分主题

发表于 2017-12-20 12:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-18 06:04 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
chxw68 发表于 2015-4-23 22:22
搜一下就出来了,下面是zhaogang1960老师的代码。

dd.jpg

不明白cnn.OpenSchema(20),遍历Sheet不更简单吗?

TA的精华主题

TA的得分主题

发表于 2023-4-18 09:28 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ning84 发表于 2023-4-18 06:04
不明白cnn.OpenSchema(20),遍历Sheet不更简单吗?

这个问题得问楼主,他要求用SQL。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 02:12 , Processed in 0.052509 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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