这是学习中的一个小结,其中必定存在错漏,需要各位朋友多多指正(hand)
若要使用 ADO 来处理 Excel 文件,只要将以下6条基本的语句中的红部分替换为实际内容即可:
方式一:
  Set Conn = CreateObject("tion")         ‘1)设置对象
Set Conn = New ADODB.Connection
  Conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & 文件全路径                                              2)打开联接
  Sql = sql 语句 & from [表的显示名称$] " & sql 语句  3)设置 sql 语句
  放置结果的区域的左上角单元格.CopyFromRecordset Conn.Execute(Sql) ‘(4)执行 sql 语句
  Conn.Close                                            ‘5)关闭联接 
  Set Conn = Nothing                                    ‘6)对象置空
实例1:汉语中的与逻辑运算中的
lhome/dispbbs.asp?BoardID=2&ID=160318&replyID=353335&skin=0
设表中有包括 字段1 的多个字段
Sub andor()
Dim Sql$
Set Conn = CreateObject("tion")  ‘1
Conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=c:\a\a.xls”                                       ‘2
Sql = "select * from [Sheet1$] where 字段1='020009' or字段1='050023' or字段1='010024'"                                        ‘3
sql语句替换表中内容上一句查字段值为 020009050023010024 的记录,并显示所有字段的值
由此看出,汉语中的对应的逻辑关系反而常常是or
'Sql = "select  字段1  from [Sheet1$] "
上一句可显示所有记录的 字段1 的值
    Sheets(2).Range("a2").CopyFromRecordset Conn.Execute(Sql)  ‘4
将结果放在以表2a2单元格为左上角的区域
    Conn.Close                                ‘5
Set Conn = Nothing                        ‘6
End Sub
实例2ADO查询
lhome/dispbbs.asp?BoardID=31&ID=153013&replyID=&skin=0
Sub filterado()
Dim  strTbl$, , intTblCnt% , Sql$, sAddress$, str$
    Dim rng1 As Range, rngt As Range
Dim a() As String
有关变量定义,参见:
lhome/dispbbs.asp?boardid=2&id=477
  Set cn = New ADODB.Connection           ‘1
  With cn  也可将一句分成三句写              ‘2
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & ActiveWorkbook.FullName & ";Extended Properties=Excel 8.0"                        ‘活动工作簿的全路径
        .Open
    End With
  intTblCnt = ActiveWorkbook.Sheets.Count  ‘工作表个数
  For t = 2 To intTblCnt         ‘遍历工作表
      Set rngt = Sheets(t).Range("b4").CurrentRegion  ‘包含 b4 单元格的连续区域
        sAddress = rngt.Offset(3, 0).Address(0, 0)        ‘区域向下偏移三行后的相对地址
        strTbl = ActiveWorkbook.Sheets(t).Name        ‘ t 个表的名称
      str = Sheets(1).Cells(3, 2).Value
      Sql = "Select * FROM [" & strTbl & "$" & sAddress & "] Where 姓名='" & str & "'"
                                ‘3
显示第 t 个表中的名称为变量 sAddress的值的区域中查姓名等于变量 str 的值的记录的所有字段值
若第 t 个表的名称为 “02-1-1” ,查区域为 A4:K81 ,姓名为王红,则 sql 语句实际为
‘          Select * FROM [02-1-1$A4:K81] Where 姓名='王红
‘  为文字连接符,其中 strTblsAddressstr 为变量,不能放在双引号中,故需将不变的文字与变量隔开并用 & 连接成最后的可以变化的语句     
        Set rng1 = Sheets(1).Cells(7, 1)         ‘ A7 单元格存于区域变量 rng1
        rng1.CopyFromRecordset cn.Execute(Sql)将查询结果放在以 A7 单元格为左上角的临时区域中                                ‘4
        If Len(rng1.Value) <> 0 Then如果查询结果不为空,则复制到指定的位置
            Cells(3, 4) = Cells(7, 1)
            Cells(3, 6) = Cells(7, 3)
            Cells(4, 2) = Cells(7, 4)
            Cells(4, 4) = Cells(7, 5)
            Cells(4, 6) = Cells(7, 6)
            Cells(5, 2) = Cells(7, 7)
            Cells(5, 4) = Cells(7, 8)
            Cells(5, 4).VerticalAlignment = xlCenter    ‘单元格内容居中
            Rows(7).Clear  ‘清除第 7 行的临时数据
          cn.Close
            Set cn = Nothing
            Exit Sub
        End If
    Next
    cn.Close               ‘5
Set cn = Nothing     ‘6
End Sub
实例3:带窗体进度条的筛选
lhome/dispbbs.asp?boardid=2&replyid=349626&id=159850&page=1&skin=0&Star=3
Sub withprogbar()
    Dim Sql$, i&, sAddress$
   
    Sheets("单井属性提取程序(系列3)").Activate
   
    Application.ScreenUpdating = False '关闭屏幕更新
    Application.EnableEvents = False   '关闭事件响应
    'Application.Interactive = False     '禁止所有的键盘输入和鼠标输入'
   
    Set Conn = CreateObject("tion") 1
    Conn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName                ‘2宏所在工作簿的文件全路径
   
  UserForm1.Show                  ‘显示窗体进度条
   
    totalrow = Range("C4").Value
    sAddress = Range("A7:" & Range("B4").Value & totalrow).Address(0, 0)    ‘取出数据库区域的地址
    For i = Range("C3").Value + 1 To totalrow
        Sql = "Select 单井标准编码,新老井标注 from [单井属性提取程序(系列3)$" & sAddress & "] where 井号='" & Cells(i, 1) & "'"                ‘3

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。