利用ADO操作外部数据——Excel之VBA(15)

引例:

在VBA里录制导入现有外部数据的宏查看宏代码 

 1 Sub 宏1()
 2 '
 3 ' 宏1 宏
 4 '
 5 
 6 '
 7     Application.CutCopyMode = False
 8     With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array( _
 9         "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=E:dataEdata.xlsx;Mode=Share Deny Write;Extended Proper" _
10         , _
11         "ties=""HDR=YES;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OLEDB:Database Password="""";Jet OLEDB:Engine Type=37;" _
12         , _
13         "Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Databas" _
14         , _
15         "e Password="""";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=Fal" _
16         , _
17         "se;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass User" _
18         , _
19         "Info Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False" _
20         ), Destination:=Range("$C$5")).QueryTable
21         .CommandType = xlCmdTable
22         .CommandText = Array("data$")
23         .RowNumbers = False
24         .FillAdjacentFormulas = False
25         .PreserveFormatting = True
26         .RefreshOnFileOpen = False
27         .BackgroundQuery = True
28         .RefreshStyle = xlInsertDeleteCells
29         .SavePassword = False
30         .SaveData = True
31         .AdjustColumnWidth = True
32         .RefreshPeriod = 0
33         .PreserveColumnInfo = True
34         .SourceConnectionFile = "C:UserseonDocuments我的数据源Edata data$.od.odc"
35         .SourceDataFile = "E:dataEdata.xlsx"
36         .ListObject.DisplayName = "表_Edata_data_.od"
37         .Refresh BackgroundQuery:=False
38     End With
39 End Sub
View Code

 会发现宏代码非常的缀长,实际上并不需要这么多

核心代码:OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:dataEdata.xlsx;
说明:连接别的数据库,这两句就够了

对于Excel还有一个扩展属性:
是否表头:
Extended Properties="HDR=YES;";

标准句式:"Provider = Microsoft.ACE.OLEDB.12.0;Data Source=E:dataEdata.xlsx;extended properties=""excel 12.0;HDR=YES"""

一、使用ADO连接外部Excel数据源

连接步骤:

1 在VBE界面中 工具—引用
勾选Microsoft ActiveX Data Object x.x Library

2 连接代码

Sub test()
Dim conn As New ADODB.Connection
conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=D:datadata.xlsx;extended properties=""excel 12.0;HDR=YES"""
‘这里使用SQL对数据进行操作
conn.Close
End Sub

抓取数据:

Range(“a1”).CopyFromRecordset conn.Execute(“select * from [data$]”)

二、常用SQL语句

查询数据 select * from [data$]
查询某几个字段 select 姓名,年龄 from [data$]
带条件的查询 select * from [data$] where 性别 = "男“
合并两个表的数据 select * from [data$] union all select * from [data2$]
插入新纪录 insert into [data$] (姓名,性别,年龄) values ('AA','男',33)
修改一条数据 update [data$] set 性别=‘男’,年龄=16 where 姓名=‘张三‘
删除一条数据 delete from [data$] where 姓名='张三'
使用LEFT JOIN …ON… (类似于VLOOKUP) select [data3$].姓名,性别,年龄,月薪 from [data$] left join [data3$] on [data$].姓名=[data3$].姓名
先UNION ALL 再LEFT JOIN select * from (select * from [data$] union all select * from [data2$])a left join [data3$] on a.姓名=[data3$].姓名
将查询结果赋值到数组 arr = Application.WorksheetFunction.Transpose(conn.Execute("select * from [data$]").GetRows)

示例代码:

Sub test()

Dim conn As New ADODB.Connection

Dim sql As String

conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=E:dataEdata.xlsx;extended properties=""excel 12.0;HDR=YES"""
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - -分割线 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

'抓取前先清除数据
Range("a2:z100").ClearContents


'正式步骤


'sql = "insert into [data$] (姓名,性别,年龄) values ('田七','男',33)"

'conn.Execute (sql)



sql = "select a.姓名,性别,年龄,月薪 from (select * from [data$] union all select * from [data2$])a left join [data3$] on a.姓名 = [data3$].姓名"

Range("a2").CopyFromRecordset conn.Execute(sql)       'CopyFromRecordset 从记录集拷贝



'- - - - - - - - - - - - - - - - - - - - - - - - - - - - -分割线- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
conn.Close

End Sub

三、使用ADO连接ACCESS数据库

连接步骤:

1 在VBE界面中 工具—引用
勾选Microsoft ActiveX Data Objects x.x Library


2 连接代码

Sub test()
Dim conn As New ADODB.Connection
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:dataAdata.accdb" 
'这里使用SQL对数据进行操作
conn.Close
End Sub

示例代码:

Sub test()

Dim conn As New ADODB.Connection

Dim sql As String

conn.Open "Provider = Microsoft.ACE.OLEDB.12.0;Data Source=E:dataAdata.accdb"
'- - - - - - - - - - - - - - - - - - - - - - - - - - - - -分割线 - - - - - - - - - - - - - - - - - - - - - - - - - - - -

'抓取前先清除数据
Range("a2:z100").ClearContents


'正式步骤


sql = "delete from [客户信息表] where 公司名称='森通'"   '在其他数据库,表名不用加$

conn.Execute (sql)

' Range("a2").CopyFromRecordset conn.Execute(sql)       'CopyFromRecordset 从记录集拷贝



'- - - - - - - - - - - - - - - - - - - - - - - - - - - - -分割线- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
conn.Close

End Sub

四、课程小结及课后练习

课程小结

需要理解并记住写法的概念
select * from [data$]
CONN.OPEN .EXECUTE .CLOSE


需要理解的概念
ADO与打开文件做操作的差别 和不同的应用场景
理解Ado连接代码的意义
了解SQL语句


课后练习

Excel库存管理系统:
问题:
作业表中完成数据查询
要求:
共2440行数据。

原文地址:https://www.cnblogs.com/zeon/p/14023932.html