Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2744|回复: 0

EXCEL VBA如何自动获取数据库数据到工作表,和用组合框筛选条件

[复制链接]
发表于 2015-10-2 11:54 | 显示全部楼层 |阅读模式
本帖最后由 jesonchu 于 2015-10-4 12:40 编辑

各位老师看到我下面长篇累牍的需求不要被吓着,因为个人语言表达能力不行,所以说的有点啰嗦,其实几点需求都是一样的。另外情况说明里的所有内容和具体需求里面的第一大点,如果不好实现,可以忽略掉(我用笨方法可以处理),主要是需求里的第二大点,恳请老师们能辛苦帮忙解答,再次表示感谢!

情况说明:                                                        
1、我的数据库中有number、city、county、year_term、station五张表,其中number包含产品名和产品代号,city包含城市名和城市代号、county包含区县名和区县代号、year_term包含产品代号、年月、年月日和期号、station包含站点代号。另外,number共3个产品,分别对应产品代号1、2、3,它们所对应的期号不一样,城市名有多个,区县也有多个,一个城市对应多个区县,一个区县也对应多个站点(注:一个城市包含了下属的所有区县和区县的站点),年月日是统一一样的。

2、现有如下语句分别能将以上列出的“代号、城市名……”等多个数值从数据库中提取出来,分别如下:                                     (1)提取产品代号  :select id,id_name from number                                                         
(2)提取城市名     :select city_id,city_name from city                                                         
(3)提取区县名     :select county_id,county_name from county
(4)提取期号        :select term_code from year_term where id=1、select term_code from year_term where id=2、select term_code from year_term where id=3
(5)提取年月日    :select month_id,yymmdd from year_term                                                         
(6)提取站点号    :select station_id from station
                                                                                                      
具体需求:                                                        
1、我现在是想怎样将以上所SQL语句一次性全放在VBA中,然后每次打开运行EXCEL时,后台VBA代码会自动执行那些SQL语句,并将每个SQL语句查询出来的数据分别插入到指定的EXCEL工作表单元格内(比如插入到“数据表”对应的列名称下的单元格内),说直白点,就是打开EXCEL后就自动执行语句,并自动将数据插入指定工作表的指定单元格内,这一步由代码自己完成,不再需要我手工获取操作。                                                                                                         
2、这个时候,我进入像“报表一”、“报表二”这种工作表中,默认状态下组合框都是空白状态:
(1)点击“代号名”下方的“组合框控件”右侧的小箭头时,会获取到“数据表”中“代号名”中的产品名称,也就是桌椅、茶几、杯具。(2)当我选择“桌椅”时,开始期号和结束期号组合框控件内会自动根据代号名筛选获取“数据表”中列名为“代号1期号”中的值,其他的不显示。
(3)代号名选择“茶几”时,开始和结束期号同样只会获取列名为“代号2期号”下面单元格内的数值(因为三个代号对应的期号都是不一样的),以此类推,选择“杯具”时也同上。
(4)当我选择城市名下方“组合框控件”内省份名时,“区县名”组合框里会列出显示所有城市的区县,开始和结束站点也会显示所有城市站点代号,其他的组合框默认即可。这样主要方便我查询整个省的某一产品的数据。
(5)当我选择某个城市名时(比如选择合肥市),对应的区县名下方的组合框控件只显示该城市所属的区县,(比如合肥滨湖区、合肥蜀山区、合肥庐阳区,区县名有重复时只显示一个),其他城市的不显示,对应的开始和结束站点代号也会跟着筛选,只显示该城市所有区县的站点代号。此时如果再从区县名组合框里选择某一个区县时,开始和结束站点代号再一次筛选只显示属于该区县的站点代号。(站点代号共8位,其中前4位表示城市代号,比如1201表示合肥,1202表示芜湖,1203表示淮南;前6位表示区县代号,120101表示合肥滨湖区,所以凡是120101开头均表示合肥滨湖区的。其中也有例外,比如合肥庐阳区有两个区县代号,12020104,12020105)。
同上,“年月份选择”里如果选择某一个月份时,开始和结束年月日只显示属于该年月份的年月日。  

补充说一下:以上功能我用笨方法能够实现,就是在EXCEL工作表中添加一个“命令按钮”,再进入VBA编辑器中将SQL语句放入VBA代码里,然后将SQL语句需要的像城市名、年月日和期号定义成变量类型,最后查数据时,在EXCEL单元格内手工输入这些值作为SQL语句的条件,再点“命令按钮”让代码获取数据并插入到指定工作表单元格内。但这种方法麻烦且不灵活。恳求各位老师们能辛苦帮忙,先行在此谢谢了。说的很啰嗦,为的只求各位老师能明白我的需求,请见谅!!!具体见附件模板。

数据源及模板.rar

30.36 KB, 下载次数: 19

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-29 03:44 , Processed in 1.730996 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表