VBA SQL不会同时记录两个表,请帮忙文件修改记录表

查看: 124340|回复: 356
从零开始学习SQL(图文教程)
阅读权限50
在线时间 小时
& & & & & & & &
本帖已被收录到知识树中,索引项:
本帖最后由
10:10 编辑
&&学习SQL一步一步开始,跟着本文的脚印带你走向SQL方向。
本分先分别介绍Microsoft Query 方法书写SQL语句,和VBA方法书写SQL语句。(注:VBA语句中只需修改其中的SQL语句即可,其他只需要复制粘贴即可)。
下面先上图:
进入VBA界面
进入VBA方法 1.jpg (45.31 KB, 下载次数: 547)
13:22 上传
2.插入模块
插入模块.jpg (41.19 KB, 下载次数: 511)
13:22 上传
3.双击模块
插入模块 2.jpg (25.7 KB, 下载次数: 466)
13:23 上传
4.在代码区码
写入VBA代码.jpg (171.93 KB, 下载次数: 564)
13:23 上传
写入VBA代码
代码如下:
Sub Test4()
& & Dim Conn As Object, Rst As Object
& & Dim strConn As String, strSQL As String
& & Dim i As Integer, PathStr As String
& & Set Conn = CreateObject(&ADODB.Connection&)
& & Set Rst = CreateObject(&ADODB.Recordset&)
& & PathStr = ThisWorkbook.FullName& &'设置工作簿的完整路径和名称
& & Select Case Application.Version * 1& & '设置连接字符串,根据版本创建连接
& & Case Is &= 11
& && &&&strConn = &Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=& & PathStr
& & Case Is &= 12
& && &&&strConn = &Provider=Microsoft.ACE.OLEDB.12.0;Data Source=& & PathStr & &;Extended Properties=&&Excel 12.0;HDR=YES&&;&&&
& & End Select
& & '设置SQL查询语句
& & strSQL = &请写入SQL语句&
& & Conn.Open strConn& & '打开数据库链接
& & Set Rst = Conn.Execute(strSQL)& & '执行查询,并将结果输出到记录集对象
& & With Sheet3
& && &&&.Cells.Clear
& && &&&For i = 0 To Rst.Fields.Count - 1& & '填写标题
& && && && &.Cells(1, i + 1) = Rst.Fields(i).Name
& && &&&Next i
& && &&&.Range(&A2&).CopyFromRecordset Rst
& && &&&.Cells.EntireColumn.AutoFit&&'自动调整列宽
& && &&&.Cells.EntireColumn.AutoFit&&'自动调整列宽
& & End With
& & Rst.Close& & '关闭数据库连接
& & Conn.Close
& & Set Conn = Nothing
& & Set Rst = Nothing
End Sub
复制代码
介绍Microsoft Query的方法
1.从数据---自其他来源--来自Microsoft Query
通过Microsoft Query学习SQL 1.jpg (103.89 KB, 下载次数: 502)
13:29 上传
2.选择Excel类型
通过Microsoft Query学习SQL 2.jpg (24.61 KB, 下载次数: 467)
13:29 上传
3.选择工作簿(文件)
通过Microsoft Query学习SQL 3.jpg (39 KB, 下载次数: 432)
13:29 上传
4.选择工作表
通过Microsoft Query学习SQL 4.jpg (55.03 KB, 下载次数: 519)
13:29 上传
5.选择需求数据的列
通过Microsoft Query学习SQL 5.jpg (29.26 KB, 下载次数: 489)
13:29 上传
6.筛选条件,本例只接选下一步
通过Microsoft Query学习SQL 6.jpg (32.54 KB, 下载次数: 445)
13:29 上传
7.排序方法,本教程也直接下一步
通过Microsoft Query学习SQL 7.jpg (27.67 KB, 下载次数: 447)
13:29 上传
8.返回工作表或Microsoft Query编辑器。(本例选 Microsoft Query,以便以编写SQL语句)
通过Microsoft Query学习SQL 8.jpg (25.96 KB, 下载次数: 500)
13:29 上传
9.编写SQL语句窗口。
通过Microsoft Query学习SQL 9.jpg (146.92 KB, 下载次数: 573)
13:29 上传
通过以上二种方法,能知道SQL书写到什么地方。
接下来,可以开始学习SQL语句语法。
阅读权限50
在线时间 小时
本帖最后由
14:42 编辑
1.基于一张工作表的查询语法& && && && && && && && && && && && && &
格式:& && &&&select[DISTINCT] [TOP&数值& [PERCENT] &列标题&[[as]]&别名列标题&]& && && && && && && && && && && && && && && && &
& && && && &from &表或查询1&[AS]&别名1&],&表或查询2&[AS]&别名2&],& && && && && && && && && && && && && && && && &
& && && &&&[where&筛选条件&][order by&排序项&[asc ▏desc]]& && && && && && && && && && &&&
& && && && && && && && && && && && && && && && && && &&&
说明:& && &&&1、&&表示必选项,&[]&表示可选项,&▏&表示多选一。& && && && && && && && && && &&&
& && &&&2、& && &&&DISTINCT:消除取重复的行& && && && && && && && &
& && &&&3、& && &&&TOP 数值:显示前几条记录& && && && && && && && &
& && &&&4、& && &&&TOP 数值 percent:显示前面分之多少条记录& && && && && && && && &
& && &&&5、& && &&&&列标题&[[as]]&别名列标题&:给标题列重新命一个新名称& && && && && && && && &
& && &&&6、& && &&&where&筛选条件&:条件语句& && && && && && && && &
& && &&&7、排序,如果要按两个或两个以上字段,那么字段与字段之间用豆号隔开,asc升序,为默认值,desc降序。& && &&&
显示所有字段的记录(全部列的内容)
select * from [sheet1$]
复制代码语句2:
select 编号,姓名,性别,出生年月,职称,部门,基本工资,婚否,奖金 from [sheet1$]
复制代码这二个语句具有同样的功能,出来的结果都是一样的。
语句1中的*号是代表全部列,语句 2中,是写上全部列字段的名称。
如果工作表没有列标题,用F1,F2,F3,F4.....这样代替
原表.jpg (94.02 KB, 下载次数: 509)
13:56 上传
& && && && && && && &
使用SQL语句出来的结果:
结果1.jpg (187.84 KB, 下载次数: 451)
13:56 上传
Microsoft Query方法:
返回工作表.jpg (115.16 KB, 下载次数: 502)
14:27 上传
将结果返回工作表:
返回工作表 2.jpg (25.16 KB, 下载次数: 425)
14:27 上传
返回工作表后样式:
结果2.jpg (101.66 KB, 下载次数: 487)
14:27 上传
Microsoft Query方法返回工作表后修改SQL语句方法:
“数据”选项卡---属性---连接属性--定义---命令文本
修改SQL语句.jpg (170.19 KB, 下载次数: 429)
14:42 上传
补充说明vba启用宏方法:
1.调出开“发工具栏”
调出开发工具栏 1.jpg (121.54 KB, 下载次数: 370)
14:10 上传
2.在自定义功能区,勾选“开发工具栏”
调出开发工具栏 2.jpg (121.46 KB, 下载次数: 388)
14:10 上传
3.设置宏安全性
宏安全性.jpg (38.76 KB, 下载次数: 371)
14:10 上传
宏安全性 2.jpg (74.13 KB, 下载次数: 375)
14:10 上传
启用宏 1.jpg (43.98 KB, 下载次数: 430)
14:10 上传
5.进入VBA界面2
进入VBA方法2.jpg (38.96 KB, 下载次数: 401)
14:10 上传
6.运行子过程,把光标放于代码中间任意行,按F5执行,或绿色小三角执行。
按F8是逐步执行,是学VBA中重要的调试技术。
运行子过程.jpg (99.91 KB, 下载次数: 450)
14:10 上传
13:45 上传
点击文件名下载附件
10.18 KB, 下载次数: 2265
阅读权限50
在线时间 小时
本帖最后由
20:52 编辑
使用SQL语句获取多列数据,及别名的使用
在Excel中所使用的SQL语句具体语法结构如下:
SELECT 列字段名1,列字段名2,列字段名3 FROM [工作表名称$]复制代码在本例 中SELECT子句后列出查询的字段即可查询出结果,如输入以下的SQL语句:
SELECT 姓名,&&性别,&&职称,部门 FROM [Sheet1$]复制代码
原图.png (68.95 KB, 下载次数: 470)
20:02 上传
使用SQL语句后结果如下图:
结果图.png (64 KB, 下载次数: 404)
20:02 上传
1.字段别名
SELECT 字段名1 AS 重命名字段1,字段名2 AS 重命名字段2 FROM [Sheet1$]复制代码本例中SQL语句如下:
SELECT 姓名 AS Name FROM [Sheet1$]复制代码
2.工作表别名
SELECT 工作表别名.* FROM [工作表名$] 工作表别名复制代码本例中SQL语句如下:
SELECT A.*&&FROM [Sheet1$] A复制代码所有字段列表
可能到这里就有人会问,你这不是多此一举吗?
2楼不是介绍了
SELECT * FROM [Sheet1$]复制代码就行了吗?还整这么复杂干什么?
其实(原来)SQL的代码是应该这样写的,上面的是简写。或者说只有一个表的情况,以后介绍多表的情况会用到表的别名。所以就在此一次把别名介绍了。
SELECT [工作表名].字段名 FROM [工作表名]复制代码实际中SQL语句应该如下:
SELCT [Sheet1$].*&&FROM [Sheet1$]复制代码
这样的使用环境中,使用表名,就太大缩短SQL语句的字符和书写方便。
注意事项:
1.在SQL语句中SQL语句英文不区分大小写,但标点符号必须是英文半角状态下输入,字段名也必须跟原来的一样。
2.使用SQL语句的时候,必须避免列字段中使用下面的特殊字符:
空格、双引号(&)、撇(')、数字标记(#)、百分号(%)、大于号(&)、小于号(&)、叹号(!)、句号(.)、方括号([或])、星号(*)、美元符号($)、分号(;)、脱字号(^)、圆括号((或))、加号(+)、反斜杠(\或/)。
如果在源数据表的列字段使用了这些特殊字符,那么在使用SQL语句列出各字段的数据时,就会发生错误。为了规范使用SQL语句,在对数据源字段命名时,尽量避免使用这些特殊字符。
阅读权限50
在线时间 小时
本帖最后由
21:52 编辑
SQL语句中的关键词DISTINCT的使用,功能是去重复值只保留一条记录。语法结构为:
SELECT DISTINCT 要去重复值的字段1,要去重复值的字段2 FROM [工作表名$]复制代码实例中使用语法
Select Distinct 用户姓名,用户卡号 From [sheet1$]复制代码
数据原图:
执行SQL语句后的效果图:
21:52 上传
点击文件名下载附件
14.49 KB, 下载次数: 1307
阅读权限50
在线时间 小时
本帖最后由
20:53 编辑
按条件筛选 使用SQL关键词 WHERE查询中的条件指定要满足什么标准信息,去掉不满足条件的数据(删除用户不要的数据)。
WHERE语句中可以有多个条件,条件之间可以用操作符AND 或者OR进行连接。
WHERE语句的语法结构如下:
SELECT 列字段名称 FROM [表名称$] WHERE 列字段名 运算符 值复制代码
运算符包含大于、小于、等于、不等于、大于或等于、小于或等于、IN、 BETWEEN、AND等 。应用实例进行说明:
提取消费金额等于100的数据。(是不是比函数公式和VBA简单,语句也容易懂。)
本例使用的SQL语句如下:
SELECT * FROM [Sheet1$] where 消费金额=100复制代码
WHERE 筛选 1.png (100.64 KB, 下载次数: 462)
20:49 上传
阅读权限50
在线时间 小时
本帖最后由
21:46 编辑
ORDER BY的语句使用对于ORDER BY 语句而言,默认值是升序排列,通常是不指定它。但升序的关键词为ASC,降序为DESC。
语法结构如下:
SELECT 列字段名 FROM [工作表名称$] ORDER BY 指定列字段名 升序(降序)复制代码下面用具体的实例进行说明
按成绩进行升序排序本例中SQL语句如下:
Select * FROM [Sheet1$] ORDER BY 成绩 ASC复制代码执行后效果如图
按成绩排序.png (153.75 KB, 下载次数: 434)
21:09 上传
按成绩进行降序排序
本例中SQL语句如下:
Select * FROM [Sheet1$] ORDER BY 成绩 DESC复制代码执行后效果如图:
按成绩降序排序.png (151.83 KB, 下载次数: 433)
21:12 上传
二列数据按降序排序:SQL语句如下:
Select * FROM [Sheet1$] ORDER BY 英语 DESC,数学 DESC复制代码效果如图:
二列数据按降序排序.png (183.95 KB, 下载次数: 501)
21:45 上传
21:20 上传
点击文件名下载附件
13.48 KB, 下载次数: 757
21:46 上传
点击文件名下载附件
13.9 KB, 下载次数: 730
阅读权限50
在线时间 小时
& & & & & & & &
本帖最后由
22:06 编辑
TOP在SQL语句中的作用
TOP的应用按顺序提取记录
SELECT TOP 3 * FROM [工作表名$]复制代码提取前面3条记录.改变3为想要提取的数字,就可以实现想得到的记录
本例中使用的SQL语句如下:
SELECT TOP 3 * FROM [Sheet1$]复制代码结果如图:
TOP 1.png (156.18 KB, 下载次数: 472)
21:27 上传
按字段名排序提取前几名的语法
升序
SELECT TOP 3 字段名 FROM [工作表名] ORDER BY 字段名复制代码降序
SELECT TOP 3 字段名 FROM [工作表名] ORDER BY 字段名 DESC复制代码以下用实例进行说明
按成绩降序排列提取前三名:
SQL语句如下:
Select top 3 * FROM [Sheet1$A1:C17]&&ORDER BY 成绩 DESC复制代码结果如图所示:
TOP 2.png (44.03 KB, 下载次数: 430)
21:46 上传
升序:
Select top 3 * FROM [Sheet1$A1:C17]&&ORDER BY 成绩复制代码结果如图:
TOP 3.png (44.01 KB, 下载次数: 463)
21:52 上传
补充说明:
SQL的VBA语句如下:
Sub Test4()
& & Dim Conn As Object, Rst As Object
& & Dim strConn As String, strSQL As String
& & Dim i As Integer, PathStr As String
& & Set Conn = CreateObject(&ADODB.Connection&)
& & Set Rst = CreateObject(&ADODB.Recordset&)
& & PathStr = ThisWorkbook.FullName& &'设置工作簿的完整路径和名称
& & Select Case Application.Version * 1& & '设置连接字符串,根据版本创建连接
& & Case Is &= 11
& && &&&strConn = &Provider=Microsoft.Jet.Oledb.4.0;Extended Properties=excel 8.0;Data source=& & PathStr
& & Case Is &= 12
& && &&&strConn = &Provider=Microsoft.ACE.OLEDB.12.0;Data Source=& & PathStr & &;Extended Properties=&&Excel 12.0;HDR=YES&&;&&&
& & End Select
& & '设置SQL查询语句
& & 'strSQL = &Select top 3 * FROM [Sheet1$] & '按顺序提取数据
& & strSQL = &Select top 3 * FROM [Sheet1$A1:C17]&&ORDER BY 成绩 DESC&
& & Conn.Open strConn& & '打开数据库链接
& & Set Rst = Conn.Execute(strSQL)& & '执行查询,并将结果输出到记录集对象
& & With Sheet1.Range(&E:G&)
& && &&&.Cells.Clear
& && &&&For i = 0 To Rst.Fields.Count - 1& & '填写标题
& && && && &.Cells(1, i + 1) = Rst.Fields(i).Name
& && &&&Next i
& && &&&.Range(&A2&).CopyFromRecordset Rst
& && &&&.Cells.EntireColumn.AutoFit&&'自动调整列宽
& && &&&.Cells.EntireColumn.AutoFit&&'自动调整列宽
& & End With
& & Rst.Close& & '关闭数据库连接
& & Conn.Close
& & Set Conn = Nothing
& & Set Rst = Nothing
End Sub复制代码
其中 [Sheet1$A1:C17]这个表示工作表名Sheet1的工作表A1:C17的这个单元格区域,这个上面介绍的区别就是突出结果在同一个工作表上。所以加上了指定的单元格区域为数据。可以根据自己的实际情况,来改变.
不在同一张表上显示结果,而且数据源规范,就可以直接用[工作表名$]。或者书写的时候写上列名不用星号(&*&)
本例也可以用如下的语句达到同样的效果:
Select top 3 姓名,班级,成绩 FROM [Sheet1$]&&ORDER BY 成绩 DESC复制代码TOP 与 PERCENT 组合在SQL语句中的使用
功能:是按百分比提取
用实例进行说明
按成绩降序排列提取前30%
SQL语句如下:
Select TOP 30 PERCENT * FROM [Sheet1$A1:C17]&&ORDER BY 成绩 DESC复制代码结果如图所示:
TOP 4.png (44.49 KB, 下载次数: 466)
22:03 上传
数据源16条数据,16*0.3=4.8 四舍五入等于 5 数据提取是整数所以结果是提取5条数据。
22:06 上传
点击文件名下载附件
13.86 KB, 下载次数: 912
阅读权限50
在线时间 小时
本帖最后由
20:45 编辑
SQL语句中的一些简单计算函数:
COUNT函数,统计函数
语法如下:
SELECT COUNT(列字段) AS 别名1 FROM [工作表名$]复制代码本示例SQL语句如下:
Select count(姓名) as 人数&&FROM [Sheet1$]复制代码按姓名统计人数,结果如图:
Count.png (38.38 KB, 下载次数: 490)
20:05 上传
SUM函数,求和函数。SQL语句语法如下:
Select Sum(列字段) as 别名 FROM [工作表名$]复制代码求总分,本例 SQL语句如下:
Select sum(成绩) as 总分&&FROM [Sheet1$]复制代码结果如图:
SUM.png (53.36 KB, 下载次数: 442)
20:10 上传
AVG函数,求平均。SQL语句语法如下:
Select AVG(列字段) as 别名 FROM [工作表名$]复制代码本例中求平均分,SQL语句如下:
Select AVG(成绩) as 平均分&&FROM [Sheet1$]复制代码结果如图:
AVG.png (53.6 KB, 下载次数: 407)
20:21 上传
现对上面的语句来个小变通,求成绩大于60的人数、总分、平均分
SQL语句如下:
Select AVG(成绩) as 大于60的平均分,SUM(成绩) as 大于60的总分,COUNT(成绩) as 大于60的人数&&FROM [Sheet1$] WHERE 成绩&60 复制代码结果如图所示:
加条件应用.png (55.12 KB, 下载次数: 418)
20:28 上传
MAX函数,求最大值。SQL语句语法如下:
Select MAX(列字段) as 别名 FROM [工作表名$]复制代码本例中SQL语句如下:
Select MAX(成绩) as 最高分&&FROM [Sheet1$]复制代码结果如图所示:
MAX.png (48.6 KB, 下载次数: 436)
20:34 上传
MIN,求最小值函数,SQL语句语法如下:
Select MIN(列字段) as 别名 FROM [工作表名$]复制代码本例中使用的SQL语句如下:
Select MIN(成绩) as 最低分&&FROM [Sheet1$]复制代码结果如图所示:
MIN.png (48.49 KB, 下载次数: 478)
20:38 上传
阅读权限50
在线时间 小时
& & & & & & & &
阅读权限50
在线时间 小时
& && && && & 占位
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师excel中如何使用VBA将SQL查询结果用于数据透视表?
此答案由T提供
Excel的数据透视表可以方便地汇总数据而无须使用一些烦琐的SQL语句,从而提高数据处理的效率。如下图所示,要对“加工记录”表进行查询,其查询结果运用于Excel中的数据透视表,该如何通过VBA实现呢?
??按Alt+F11组合键打开VBE窗口,选择菜单“插入”——“模块”,并输入以下代码:Sub 如何使用VBA将SQL查询结果用于数据透视表()& & Dim AdoConn As New ADODB.Connection& & Dim srtConn As String& & Dim strSQL As String& & Dim objPivotCache As PivotCache& & Dim i As Long& & Cells.ClearstrConn = &Provider=Microsoft.ACE.OLEDB.12.0;& & &Data Source=& &&ThisWorkbook.Path & Application.PathSeparator & &数据库.&& & AdoConn.Open strConn& & strSQL = &SELECT 日期,型号,规格,加工人,数量 FROM [加工记录]&& & Set objPivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal)& & Set objPivotCache.Recordset = AdoConn.Execute(strSQL)& & objPivotCache.CreatePivotTable TableDestination:=Range(&A1&), TableName:=&加工记录&& & AdoConn.Close& & With ActiveSheet.PivotTables(&加工记录&)& & & & .PivotFields(&型号&).Orientation = xlRowField& & & & .PivotFields(&型号&).Position = 1& & & & .PivotFields(&规格&).Orientation = xlRowField& & & & .PivotFields(&规格&).Position = 2& & & & .PivotFields(&加工人&).Orientation = xlColumnField& & & & .PivotFields(&加工人&).Position = 1& & & & AddDataField ActiveSheet.PivotTables(&加工记录&).PivotFields(&数量&), &数量合计&, xlSum& & End WithEnd Sub返回工作表界面,在功能区的“开发工具”选项卡中单击“宏”按钮,并执行过程“如何使用VBA将SQL查询结果用于数据透视表”。即可在Excel中生成以SQL查询结果为数据源的数据透视表。??
此答案由T提供
Excel的数据透视表可以方便地汇总数据而无须使用一些烦琐的SQL语句,从而提高数据处理的效率。如下图所示,要对“加工记录”表进行查询,其查询结果运用于Excel中的数据透视表,该如何通过VBA实现呢?
??按Alt+F11组合键打开VBE窗口,选择菜单“插入”——“模块”,并输入以下代码:Sub 如何使用VBA将SQL查询结果用于数据透视表()& & Dim AdoConn As New ADODB.Connection& & Dim srtConn As String& & Dim strSQL As String& & Dim objPivotCache As PivotCache& & Dim i As Long& & Cells.ClearstrConn = &Provider=Microsoft.ACE.OLEDB.12.0;& & &Data Source=& &&ThisWorkbook.Path & Application.PathSeparator & &数据库.&& & AdoConn.Open strConn& & strSQL = &SELECT 日期,型号,规格,加工人,数量 FROM [加工记录]&& & Set objPivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal)& & Set objPivotCache.Recordset = AdoConn.Execute(strSQL)& & objPivotCache.CreatePivotTable TableDestination:=Range(&A1&), TableName:=&加工记录&& & AdoConn.Close& & With ActiveSheet.PivotTables(&加工记录&)& & & & .PivotFields(&型号&).Orientation = xlRowField& & & & .PivotFields(&型号&).Position = 1& & & & .PivotFields(&规格&).Orientation = xlRowField& & & & .PivotFields(&规格&).Position = 2& & & & .PivotFields(&加工人&).Orientation = xlColumnField& & & & .PivotFields(&加工人&).Position = 1& & & & AddDataField ActiveSheet.PivotTables(&加工记录&).PivotFields(&数量&), &数量合计&, xlSum& & End WithEnd Sub返回工作表界面,在功能区的“开发工具”选项卡中单击“宏”按钮,并执行过程“如何使用VBA将SQL查询结果用于数据透视表”。即可在Excel中生成以SQL查询结果为数据源的数据透视表。??
此答案由T提供
Excel的数据透视表可以方便地汇总数据而无须使用一些烦琐的SQL语句,从而提高数据处理的效率。如下图所示,要对“加工记录”表进行查询,其查询结果运用于Excel中的数据透视表,该如何通过VBA实现呢?
??按Alt+F11组合键打开VBE窗口,选择菜单“插入”——“模块”,并输入以下代码:Sub 如何使用VBA将SQL查询结果用于数据透视表()& & Dim AdoConn As New ADODB.Connection& & Dim srtConn As String& & Dim strSQL As String& & Dim objPivotCache As PivotCache& & Dim i As Long& & Cells.ClearstrConn = &Provider=Microsoft.ACE.OLEDB.12.0;& & &Data Source=& &&ThisWorkbook.Path & Application.PathSeparator & &数据库.&& & AdoConn.Open strConn& & strSQL = &SELECT 日期,型号,规格,加工人,数量 FROM [加工记录]&& & Set objPivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal)& & Set objPivotCache.Recordset = AdoConn.Execute(strSQL)& & objPivotCache.CreatePivotTable TableDestination:=Range(&A1&), TableName:=&加工记录&& & AdoConn.Close& & With ActiveSheet.PivotTables(&加工记录&)& & & & .PivotFields(&型号&).Orientation = xlRowField& & & & .PivotFields(&型号&).Position = 1& & & & .PivotFields(&规格&).Orientation = xlRowField& & & & .PivotFields(&规格&).Position = 2& & & & .PivotFields(&加工人&).Orientation = xlColumnField& & & & .PivotFields(&加工人&).Position = 1& & & & AddDataField ActiveSheet.PivotTables(&加工记录&).PivotFields(&数量&), &数量合计&, xlSum& & End WithEnd Sub返回工作表界面,在功能区的“开发工具”选项卡中单击“宏”按钮,并执行过程“如何使用VBA将SQL查询结果用于数据透视表”。即可在Excel中生成以SQL查询结果为数据源的数据透视表。??
对“关于SQL外连接的解释”纠错
关注希赛微信
接听时间:工作日00:00-24:00(仅收市话费)
&&|&&关于希赛&&|&&工作机会&&|&&服务协议&&|&&免责声明&&|&&联系希赛&&|&&网站地图&&&&&&&&希赛网&&版权所有&&(C)&&&&&&&>&SQL+数据透视表+VBA 数据透视表的超级应用
SQL+数据透视表+VBA 数据透视表的超级应用
上传大小:31KB
SQL+数据透视表+VBA 使数据透视表走向更灵活,更智能,更适用。
这个是我和师傅一撇首度合作,他提供了文件并提出了要求,我帮他实现其效果
下面从几个方面解释一下:
一个源文件和一个通过用SQL查询生成的数据透视表
将源文件拖到电脑的任意位置,甚至将文件名也改掉,用VBA配上代码和窗体找到文件,数据透视表仍然能够正常工作
现在来讲讲怎么使做出来的东东适应大家的需要
用OLE DB窗口引用工作表或写SQL语句,因为用这个方法同VBA相通,copy下来代码区的的语句
打开透视表文件,将透视表中的字段全部拖出来,也就是变成一个空数据透视表。
右击下面工作表图标 或者 工具》宏》visual basic 编辑器,点击模块看到代码区
将2、1步骤copy的语句commandtext的数据Array中的引号中
.CommandText = Array(&
可能不同版本会有一些差别,同时SQL语句中如果添加了文本生成新字段,双引号要成对翻倍
如:&出库& AS 表单选项 要改成 &&出库&& AS 表单选项
语句太长的处
理:在代码区如果你想好看一些,你可以插入“ _”来换行,当然不能插在一个单词或自动名等中间。
将文件存盘,重新打开就会有了数据,你可以将字段拖入数据透视表中,创建你自己的数据透视表,
这样文件就可以使用,相信VBA的引导不用教就可以交给别人使用了
下面附上代码,包含3个区:
1、 工作簿去,打开文件时工作
Private Sub Workbook_Open()
If Dir(Sheets(&path&).Range(&A1&)) = && Then
OP = MsgBox(&源文件已被移走,请选择下列选项& + Chr(10) + &1、选择是,重新输入文件全名& + Chr(10) + &2、选择否,打开原有的数据透视表& + Chr(10) + &3、选择取消,关闭文件&, vbYesNoCancel, &Scarlett温馨提示&)
If OP = vbYes Then
UserForm1.Show
If OP = vbNo Then
ActiveWorkbook.Close True
If OP = vbCancel Then
Call refreshpv
2、窗体区,实现文件的查找
Private Sub CommandButton1_Click()
Dim fopen As FileDialog
Set fopen = Application.FileDialog(msoFileDialogFilePicker)
fopen.Show
TextBox1.Value = fopen.SelectedItems(1)
Set fopen = Nothing
Private Sub CommandButton2_Click()
If InStr(TextBox1.Value, &.&) & 0 Then
Sheets(&path&).Range(&A1&) = TextBox1.Value
Call refreshpv
MsgBox &文件名要带路径含后缀的文件名&, &Scarlett_88温馨提示&
TextBox1.SetFocus
Private Sub CommandButton3_Click()
Private Sub TextBox1_Change()
Private Sub UserForm_Activate()
Private Sub UserForm_Click()
TextBox1.Value = Sheets(&path&).Range(&A1&)
3、模块区,实现SQL语句的地址更新和刷新数据透视表的数据源
Sub refreshpv()
With ActiveSheet.PivotTables(&数据透视表1&).PivotCache
.Connection = Array( _
&OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;User ID=AData Source=& & Sheets(&path&).Range(&A1&) & &;Mode=Share Deny W& _
&Extended Properties=&&HDR=YES;&&;Jet OLEDB:System database=&&&&;Jet OLEDB:Registry Path=&&&&;Jet OLEDB:Engine Type=35;Jet OLEDB:Databa& _
&se Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password=&&&&;Je& _
&t OLEDB:Create System Database=FJet OLEDB:Encrypt Database=FJet OLEDB:Don't Copy Locale on Compact=FJet OLEDB:Com& _
, &pact Without Replica Repair=FJet OLEDB:SFP=False&)
.CommandType = xlCmdTable
.CommandText = Array( _
&select &&期初&&
AS 表单选项,规格型号,机器号,数量,0 as 数量3, 0 as 数量2, 金额,0 as 金额3, 0 as 金额2
select &&入库&& AS 表单选项,规格型号,机器号, 0& _
& as 数量2, 数量,0 as 数量3, 0 as 金额2, 金额,0 as 金额3 from
select &&出库&& AS 表单选项,规格型号,机器号, 0 as 数量3, 0 as 数量2,数量, 0 as 金额3, 0 as 金额2,金额 from [出库$]& _
ActiveSheet.PivotTables(&数据透视表1&).PivotCache.Refresh
...展开收缩
综合评分:5
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有3条
代码很实用,不过功能简单了点。对SQL的应用很赞!!
学习了,excel和sql的链接是个很强大的课题
东西不错,很有启发,能否介绍使用sql对多表进行查询。
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
SQL+数据透视表+VBA 数据透视表的超级应用
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
SQL+数据透视表+VBA 数据透视表的超级应用}

我要回帖

更多关于 员工刷卡记录表修改 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信