设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1619|回复: 4
打印 上一主题 下一主题

[模块/函数] 利用ADO的OpenSchema方法在不打开xls文件情况下获取Sheet名集合

[复制链接]
跳转到指定楼层
1#
发表于 2011-10-14 16:17:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
需引用ADO库,此法不能打开带有密码的xls文件
Public Function GetTableName(DataBaseName As String)
    Dim strcnn As String
    Dim TableSet As ADODB.Recordset
    Dim con As New ADODB.Connection
    Dim DataBaseType As String
    Select Case Right(DataBaseName, 3)
    Case "xls"
        DataBaseType = "Excel Files"
    Case "mdb"
        DataBaseType = "MS Access Database"
    End Select
    strcnn = "DSN=" & DataBaseType & ";dbq=" & DataBaseName
    con.Open strcnn
    Set TableSet = con.OpenSchema(adSchemaTables)
    Do Until TableSet.EOF
        GetTableName = GetTableName & TableSet!table_name & ","
        TableSet.MoveNext
    Loop
    GetTableName = Left(GetTableName, Len(GetTableName) - 1)
    con.Close
    Set gconnection = Nothing
End Function
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2011-10-14 16:20:41 | 只看该作者
本帖最后由 鱼儿游游 于 2011-10-14 16:45 编辑

我试过此方法,如工作表名是中文,有时会出错(不是每次都出错,令人纳闷),返回的工作表名的第一个字符是“?”
后来,我改用打开EXCEL文件的方法,没再出现上述问题。


    '打开Excel文件
    Set objExcelApp = CreateObject("Excel.Application")
    Set objExcelBook = objExcelApp.Workbooks.Open(strExcelFileName, , True)
    strSheetList=""
    For Each objExcelSheet In objExcelBook.Worksheets
          strSheetList=strSheetList &  objExcelSheet.Name & ","
    Next

3#
 楼主| 发表于 2011-10-14 16:31:49 | 只看该作者
鱼儿游游 发表于 2011-10-14 16:20
我试过此方法,如工作表名是中文,有时会出错,返回的工作表名的第一个字符是“?”

多谢提醒,我再测试下
4#
发表于 2011-10-17 12:12:31 | 只看该作者
我好象没遇到过
5#
 楼主| 发表于 2011-10-17 12:21:57 | 只看该作者
改用ADOX的Catalog对象试试
Public Function GetTableName(FileName As String)  
'需引用Microsoft ADO .Ext各版本
    Dim cnn    As New ADODB.Connection
    Dim mycat  As New ADOX.Catalog
    Dim i As Integer
    Set cnn = New ADODB.Connection
    With cnn
        .Provider = "microsoft.jet.oledb.4.0"
        If Right(FileName, 4) = ".xls" Then _
        .Properties("extended properties").Value = "excel 8.0"           '文件为xls,增加连接词
        .Open FileName
    End With
    mycat.ActiveConnection = cnn
    For i = 0 To mycat.Tables.Count - 1
        If Left(mycat.Tables.Item(i).Name, 4) <> "MSys" Then
            Debug.Print mycat.Tables.Item(i).Name
        End If
    Next i  
    Set mycat = Nothing
    cnn.Close
    Set cnn = Nothing
End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-10 22:22 , Processed in 0.107126 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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