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

摘要:
示例:在VBA View宏代码1子宏1()2“3”宏1宏4“56”7应用程序中记录和导入现有外部数据的宏。CutCopyMode=False8WithActiveSheet.ListObjects。添加(源类型:=0,源:=阵列(_9“OLEDB;提供程序=Microsoft.ACE.OLEDB.12.0;密码=“”;用户ID=

引例:

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

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

利用ADO操作外部数据——Excel之VBA(15)第2张利用ADO操作外部数据——Excel之VBA(15)第3张
 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 JOINselect * 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行数据。

免责声明:文章转载自《利用ADO操作外部数据——Excel之VBA(15)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇axis1.4调用WebService报找不到分派方法【数据分析&数据挖掘】数据合并和拼接案例下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 文件的选择

Android 文件的选择 打开文件选择器 private void showFileChooser() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCat...

常用的sql语句(转)

一、简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ename, mgr FROM emp; SQL>SELECT DISTINCT mgr FROM emp; 只显示结果不同的项 4. 查询指定行 S...

视图的用处

    以往当我们查询数据时,一定要很认真的地从设计 select语句开始,将需要查询的每个字段写在sql语句里,每次你要以同样的条件来查询数据时,那么每次都要重复输入相同的查询语句,效率很低。若将这个经常要重复使用的查询语句创建成视图,就不用那么麻烦了!直接用select * from 视图名就行了,其实将查询语句创建成视图,不仅仅是简化查询的动作;更重要...

influxdb基本SQL操作2

influxdb0.13命令  1、数据构成 INSERT cpu_load_short,host=server01,region=us-west value=0.64,value2=0.86 1434055562000000000 第一部分:“cpu_load_short,host=server01,region=us-west” 第一部分称为key,...

c# 构造tree下拉框,空格转化

c#代码写的空格如何在html中的select中展示出来呢? var str = ""; //父级菜单不缩进 for (var j = 1; j < i; j++) { s...

通过http方式 post天气,并合成语音

# coding=utf-8 import sys import json import pygame import time IS_PY3 = sys.version_info.major == 3 if IS_PY3: import requests from urllib.request import urlopen fro...