Excel-Excel-入门(Excel作为界面端,Excel作为数据库)


示例Excel*作为数据库,从Excel中获取来自于交通院,语文和数学成绩都是*>80**分的信息

图片

实现结果
图片

思考

  1. 传统方法:对数据表进行循环判断,找到满足条件的行

  2. 新方法:查询通过一句***SQL***实现SQL = "Select " & filds & " From " & tbl_name & " Where (" & searchC & ")",逻辑过程如下:

    • 连接数据库
    • 确定***SQL***语句
    • 执行***SQL***语句
    • 获取结果
    • 断开数据库

SQL
图片

代码

过程main

Sub main()        Dim dbAddr
    dbAddr = ThisWorkbook.Path & "\数据源.xlsx"

    Dim adConn As ADODB.Connection  '连接
    Set adConn = New ADODB.Connection        Dim rs As ADODB.Recordset        Set rs = New ADODB.Recordset            Dim SQL As String
    Dim filds        Dim tbl_name        Dim searchC

    adConn.Open "provider=Microsoft.ACE.OLEDB.12.0;" _
                            & "extended properties=excel 12.0;" _
                            & "data source=" & dbAddr

    filds = "姓名,学院,语文,数学"
    tbl_name = "[data$]"

    Dim searchC1        Dim searchC2        Dim searchC3        Dim sht_name        Dim sht        Dim i

    searchC1 = "学院='交通院'"
    searchC2 = "语文>80"
    searchC3 = "数学>80"
    searchC = searchC1 & " and " & searchC2 & " and " & searchC3

    SQL = "Select " & filds & " From " & tbl_name & " Where (" & searchC & ")"
    Set rs = adConn.Execute(SQL)

    sht_name = "示例"
    Set sht = ThisWorkbook.Worksheets(sht_name)            For i = 1 To rs.Fields.Count Step 1
        sht.Range("A1").Offset(0, i - 1) = rs.Fields(i - 1).Name '字段序号从0开始
    Next i

    sht.Range("A2").CopyFromRecordset rs
    sht.Cells.EntireColumn.AutoFit        '关闭数据库
    adConn.Close        Set adConn = NothingEnd Sub

代码截图
图片

部分代码解读

  1. 数据库连接
    ***Excel***连接

    adConn.Open "provider=Microsoft.ACE.OLEDB.12.0;" _
                 & "extended properties=excel 12.0;" _
                 & "data source=" & dbAddr

    Access连接

    With adConn
         .Provider = "Microsoft.ACE.OLEDB.12.0;"
         .Open "Data Source=" & dbAddrEnd With
  2. 工作表的表示方法tbl_name = "[data$]",使用[$]

  3. 复制***rs***信息到工作表:sht.Range("A2").CopyFromRecordset rs

**
**

Ps
1)采用ADO的方式连接的数据库,需要人为先在*VBE*中打开这个引用,菜单工具-引用
图片
2)当数据量越大,本文中采用的方式,效率越明显,是不错的方法幺