我用ADO连接Excel后,再用以下代码取表名时出错(不用ADO连接时不出错),请那位大哥给出用ADO直接取表名的好方法。这是我的代码     Set VBEXCEL = CreateObject("Excel.Application")
    VBEXCEL.Workbooks.Open app.path & "\xL.xls"
    For i = 1 To VBEXCEL.Worksheets.Count
        debug.print VBEXCEL.Worksheets(i).Name
    Next
    VBEXCEL.Quit
    Set VBEXCEL = Nothing

解决方案 »

  1.   

    Sub Main()
        Dim cnn As ADODB.Connection
        Dim rst As ADODB.Recordset
        
        Set cnn = New ADODB.Connection
        cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\Book1.xls;DefaultDir=C:\"
        
        Set rst = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))
        While Not rst.EOF
            Debug.Print rst!TABLE_NAME
            rst.MoveNext
        Wend
        
        Set rst = Nothing
        Set cnn = Nothing
    End Sub
      

  2.   

    Tiger_Zhao就是行,问题已经解决。不过还是要请教一这两句连接语句怎么看都看不明白啊!可以简单地解释一下吗?
        cnn.Open "Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=C:\Book1.xls;DefaultDir=C:\"
        
        Set rst = cnn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, Empty))
      

  3.   

    前一句是 ODBC 访问 Excel 的驱动方式,你所谓的“用ADO连接Excel”难道不是这种方式?
    第二句用来获取当前连接的数据库结构信息,具体查看 MSDN 中 OpenSchema 方法的帮助,里面列出了不同的 QueryType 需要不同的 Criteria 参数。这里用 adSchemaTables 表示取数据库中表的信息,MSDN 中 说明需要 4 个 Criteria:TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE,由于我们要取全部表信息,所以不加任何过滤,用 4 个 Empty 就可以了。比如要取表 Sheet1$ 的字段信息,MSDN 中说明需要 4 个 Criteria: TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME。就用:
    Set rst = cnn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "Sheet1$", Empty))
      

  4.   

    我用这句连接,看上去没你的代码好看
    set Cnn=CreateObject("Adodb.Connection")
    set Rst=CreateObject("Adodb.Recordset")
    Cnn.Provider="Microsof.JET.OLEDB.4.0"
    Cnn.Open "Data Source=D:\DX.xls;Extended Properties='Excel 8.0'"
    Rst.open "Select * From [Sheet1$]",Cnn,1,3
      

  5.   

    虽然微软推荐用 OLEDB 代替 ODBC,不过在 VB6 和早期的数据库中 ODBC 更好一点。