⑤可隐藏通报正文范围外无须用到的单元格区域,例如要隐藏1到及其以后的列
,
那么用鼠标选中 1列,同时接下 [ Ctrl+Shift+ → ]
三个键,并单击鼠标右键,选中[ 隐藏 ]
即可,
同理,
还可隐藏无须用到的行。
⑥如果希望隐藏行、列标题,可通过 [
文件l
→[
选项1 → [
高级1 ,找董IJ [ 显示行和列
标题1的复选框,去除勾选即可。最终通报正文效果如图 4-10所示。
小白: 嗯 l 对通报正文进行这些设置,看上去就像Word制作的通报一样,很规范。 191
192
》 谁说菜鸟不会数据分析(工具篇)
4 . 2 . 3 数据提取自动化
Mr 林,接下来我们要做最重要的一件事,就是实现每天早上一键自动提取所需的通报数 击居 z 这就需要用到之前掌握的SOL与VBA知识啦。
小白: 具体要怎样实现呢?两者如何结合起来呢?
M r.林 首先有一个前提条件,就是数据库有固定的 IT人员进行维护,把每天产生的运营相 关的"用户明细 H 、 "订购明细"曰忘数据文件导入Access数据库中,然后我们只需每天打开 Access数据库查询所需要的数据。
我们可以把SOL语旬中查找的曰期条件,根据系统时间进行设置,假设今天日期为 "2011 9-5 日' 我们需要查询昨天(2011-9-4 )的数据, 那么可把SOL语旬的日期筛选条件写为
"WHERE 订购日期 <DATEQ AND订购曰期 >=DATEQ-1" ,可实现不用手工调整, 根据系统时 间自动取数的效果。
小白 Mr林, 周一的时候怎么办?周六、周曰非工作日,不需要做通报,周 做通报的时 候需要提取三天的数据。
Mr 林· 你这个问题很好,如果采用这种方式,就需要人工进行VBAì吾旬的调整,有点麻 烦,如果其他同事来接手,不熟悉VBA环境,就更麻烦。
所以还有另外一种思路,就是我们可设置输入日期功能,系统自行根据输入的日期,进行相 关数据查询与提取,这样我们想提取哪天的数据就提取哪天的数据。
小白· 嗯 l 随心所欲, 我喜欢。
Mr 林. 所以,实现从数据库取数,把数据结果追加至 Excel相应表中,需要用SOL与VBA语 旬, 主要实现以下几个功能。
食 打开Access数据库。
食 输入提取数据的日期。
食 运行指定的提数SOU吾句。
食 将SOLì吾旬运行的数据结果自动追加到Excel "数据源"表的新记录中。
相关的VBAì~句编写如下 Sub 每日数据提取。
VSA
Dim AdoConn As New ADODB.Connection
• Co门 nec!ion
Dim MyData As String Dlm N
As
Integer Dim D1 As DateOim 02
As
Oate " ~ ',.';)2SO
Oim strSOL 1
As
String Oim strSOL2 As String Oim strSOL3 As String Oim strSOL4 As StringρutBox
第4章让报告自动化
01 = InputBox \,请输入需要提数的日期, 例如 2011-9-4", '提数日期呼 02 = 01
+
1·取第3列第 1个空格单元格的行数,并赋值给N
N
=
ActiveSh田t. Range('C 1j.E
nd(xIOown).Row+
1MyOata = ThisWorkbookPath & "\壳 1'Q.,:*.accdb"
With AdoConn
Provider
=
"Microso~,ACE , OLEDB,12,O"Open MyOata End With
st
rS
OL1 = SELECT count(Fli"
IO) FROM#'& 01 & #
,'~ WHERE T~l J 百飞#& 02 & # ANO 汪l
strSOL2
=
'SELECT count( 用户 10)FROM (SELECT OISTINCT 忖户 10FROM iT啕明缅 WHERET ,
3
, < # & 02 & # ANO:J :~.J阁#'&01 & '的lstrSOL3
=
'SELECT count(订单编号) sum(~] 购金品)FROM ì丁W.l 明细 WHERE 订购日期<#.~&02& '#ANO >J毗J 日j!j>二 #"&01& #
st
rS
OL4 = 'SELECT count( 南户 10)FROM (SELECT OISTINCT 用户 10 FROM 订购明细 WHERE 明明# &02 &"别~iQl
193
》 谁说菜鸟不会数据分析(工具篇)
ActiveShee
t.
Cells(N,
3).CopyFromRecordset AdoConn,Ex
ecute(strSQL 1) ActiveSheet.
Cells(N,
4).CopyFromRecordset AdoConn,Ex
ecute(strSQ L2) ActiveSheet.
Cells(N, 5).CopyFromRecordset AdoConn.Execute(strSQL3) ActiveSheet.Cetls(N ηCopyFromRecordset AdoConn.Ex
ecute(strSQL4)AdoConn, Close
Set AdoConn ; Nothing
s口巳
MsgBox"数据提取完毕1"
End Sub
虽然之前 Mr 林已经给小白介绍了 VBA基础知识,但是小臼毕竟还没有真正入门,第一次见 到这么多陌生的VBA语旬, 顿时感到头晕 这些VBA语句都是什么意思呀?
Mr 林看到小自一脸茫然的样子,解释道:不要怕,小白i 我已经将相关解释都放在每块语 旬之前,你可以参考。 VBA语句执行的步骤,如图 4-17所示。
E lËs(lI!m!I!JM~~
EJliBJllËS(H!l!J3I:ti!ñlil{ft嗣 Eñ!l!lËACC"55U~!I!J~!l
E面 i!J . M!l!iiMflJExcel 嗣
四ioLJÆa ,酬,酬 . . .
图 4-17 每日数据提取VBA语句执行步骤
小白这时对 VBAì吾旬已经不再那么陌生·经您这么 说,我明白这些VBAì吾旬的大致情况 了,具体细节还要研究研究。还有个问题,我对 SQL语旬中赋值的语旬不是太明白,好多双引 号、井号 (n) 、连接待(&)等符号,都是什么意思呢?
194 Mr 林:好的,我分别做 下解释。
第4章让报告自动化
食 双引号之间的语句是VBAì吾旬中的文本字符串。
* 井号(# )主要在SOL查询i吾旬中表示数据类型为曰期型,通常在数据值两端加上井号 (#) ,这在讲Access数据库SOLì吾旬查询时就介绍过。
食 连接符(& )在VBAì吾句中, 用于连接各个文本字符串,以组成一串所需的字符串, 例 如VBA语句中的strSOL1 变量所赋值的 SOLì吾旬。因为需要根据输入的曰朗进行数据查询 提取, VBA语句中涉及文不字符串与曰期参数两种类型的文本。
》 谁说菜鸟不会数据分析(工具篇)
选择VBE菜单申
[
土具]
的[
引用]
选项, 在弹出的[
号|用]对话框中,查找并勾选"Microsoft AcliveX Dala Objecls 2
,8 Ubrary"
, 并单击[
确定]
按钮,如图4-2口所示。E冉~.- 国l皿 -m;;"'J;I.1fl.ifiit 函'
2g 酣 1. c:r osofl~Ul. tCoø.tro120 1,,:rOloH ~Ul. tS IlT"'1lT2.O
筐窒 ω 百日也工睛 说明
1. c:r osofl~UI.息 Ser...rbt...sionJ:~
..-俑 ~Ar ,l~'An ,……T_.l 巾-..
,
I.aosoft .l.ct,...,z DahObJ.ch28 t..br町
定位 C \1roO' .1.1u也…ø. 1 <ln\Syst_\td.o飞..sedo15 ‘
C豆oc王o 通警 领噜
马- ZF"EW 写胃画 "咱 噜"‘;;;.;il隐寻 .~.IL"",,,,,I'I'.."'"树占扭,,"
... c lù.1冒险.okh~ ‘''''备U .lf ucA
8 9 10 11 12 13 14 15
-第4章让报告自动化
的 。1每日数据提取"宏, 效果如图4-22所示。
旦些J
16 15
图 4-22 每日数据提取"按钮设置效果示f9\J
@
数据自动化提取Mr林·到此, 整个日报自动化设置工作就已完成。小白, 检验成果的时刻到来了,现在日 报自动化模板里只有截至2011年9月 3 日的数据,而我现在要提取2011 年9月 4 日的数据,你来单 击"每日数据提取"按钮吧!
小白双手合并来回搓了几下 那我就不客气啦1
rmP..o
j 单击"每日数据提取"按钮。在弹出的 [提数日期]对话框中,根据对话框提示的曰期格式要求,输入 " 2011-9-4" ,单击[确定]按钮,如图4-23所示。
飞'1iii I~!
面恤λ帽蛐q 日翩翩 剧旧
I
IIÆI
lI!翌」
商iï+'i[
图 4-23 [I!数日期1对话框
Excel
自动运行相关VBAi吾旬,并将结果逐步追加至单元格C8:G8处,单元格H8:J8的数
据也相应进行累加计算,
运行完毕后弹出"数据提取完毕"提示框,单击[
确定]
按 钮, 即可完成2011年9月4日的数据提取工作, 直口图4-24所示。小白惊讶地张着大嘴· 哇塞 I Mr林, 太方便啦! }$好棒啊! 197
》 谁说菜鸟不会数据分析(工具篇)