• Sql in VBA 之 类模块


    把重复的代码搞进类模块,也不知道对不对,反正我是没报错。

    表1:一班

    姓名	语文	数学	英语
    天	136	140	21
    地	62	90	98
    玄	200	126	10

    表2:二班

    姓名	语文	数学	英语
    子	82	97	65
    丑	55	99	46
    寅	54	61	60

    表3:三班

    姓名	语文	数学	英语
    甲	110	110	100
    乙	110	102	101
    丙	107	106	110
    

    类模块:数据库

     1 Property Get Excel数据库(Mypath As String)
     2     If Application.Version < 12 Then
     3         Excel数据库 = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath
     4         Else
     5         Excel数据库 = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath
     6     End If
     7 End Property
     8 
     9 Sub 查询(MyData As String, sql As String, rng As Range)
    10     Dim cnn As Object, rst As Object, i&
    11     Set cnn = CreateObject("adodb.connection")
    12     cnn.Open MyData
    13     Set rst = cnn.Execute(sql)
    14     Cells.ClearComments
    15     For i = 0 To rst.Fields.Count - 1
    16         rng.Offset(-1, i) = rst.Fields(i).Name
    17     Next
    18     rng.CopyFromRecordset rst
    19     cnn.Close
    20     Set cnn = Nothing
    21 End Sub

    调用类模块:

     1 Sub 并表查询2()
     2     Dim sql As String, Sql1 As String
     3     Dim Sht As Worksheet, Sht_name As String
     4     Dim i As Long, Mypath As String, rng As Range
     5     Mypath = ThisWorkbook.FullName
     6     Set rng = ActiveSheet.Range("a2")
     7     Dim data As New 数据库
     8     Sql1 = "SELECT 姓名,语文,数学,英语,"
     9     For Each Sht In Worksheets
    10         Sht_name = Sht.Name
    11         If Sht_name <> ActiveSheet.Name Then
    12             sql = sql & Sql1 & "'" & Sht_name & "' AS 班级 FROM [" & Sht_name & "$] UNION ALL "
    13         End If
    14     Next
    15     sql = Left(sql, Len(sql) - 11)
    16    
    17     data.查询 data.Excel数据库(Mypath), sql, rng
    18     
    19 End Sub

    查询结果:

    姓名	语文	数学	英语	班级
    天	136	140	21	一班
    地	62	90	98	一班
    玄	200	126	10	一班
    子	82	97	65	二班
    丑	55	99	46	二班
    寅	54	61	60	二班
    甲	110	110	100	三班
    乙	110	102	101	三班
    丙	107	106	110	三班
    

      

      

  • 相关阅读:
    c# 中textbox 换行符是什么??
    aspnetpager注意事项
    asp 自动弹出窗口
    用递归方法删除文件夹目录及文件
    二维数组的应用
    外边框的样式
    JS 不间断滚动
    单目标 JADE
    在Delphi中使用Action降低水平功能和业务功能的耦合
    关于TListView中的Data属性
  • 原文地址:https://www.cnblogs.com/Stefan-Gao/p/13520811.html
Copyright © 2020-2023  润新知