这是学习中的一个小结,其中必定存在错漏,需要各位朋友多多指正(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语句替换表中内容‘上一句查字段值为 020009、050023和010024 的记录,并显示所有字段的值
‘由此看出,汉语中的“和”对应的逻辑关系反而常常是“或”(or)
'Sql = "select 字段1 from [Sheet1$] "
‘上一句可显示所有记录的 字段1 的值
Sheets(2).Range("a2").CopyFromRecordset Conn.Execute(Sql) ‘(4)
‘将结果放在以表2的a2单元格为左上角的区域
Conn.Close ‘(5)
Set Conn = Nothing ‘(6)
End Sub
实例2:ADO查询
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 姓名='王红’
‘ & 为文字连接符,其中 strTbl、sAddress、str 为变量,不能放在双引号中,故需将不变的文字与变量隔开并用 & 连接成最后的可以变化的语句
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小时内删除。
发表评论