sql查询的数据复制到excel不完整_EXCEL日报自动化_2

本文介绍了如何通过VBA将SQL查询结果自动化地导入Excel,创建日报正文。首先新建‘日报正文’工作表,设置标题和日期下拉控件。接着,利用VBA连接Access数据库,输入日期,执行SQL查询并将数据追加到Excel‘数据源’表,最后展示自动化完成的通报正文效果。
摘要由CSDN通过智能技术生成

建立“通报正文”表

整理好“数据源”表与“数据转化”表后,接下来就该把每条通报正文与图表一一对应起来,按事先拟定的分析框架进行整理。

① 新建一张工作表,并命名为“日报正文”。

② 在A1单元格处输入通报标题,合并A1:H1单元格,并设置字体大小及排版居中。

③ 添加日期下拉输入控件,可直接复制“数据转化”表中已设置好的下拉控件。

④ 输入、设置通报正文,例如在B4单元格输入“一、用户规模”,在B5单元格输入“=数据转化!I18”,将新增用户数的柱形图复制到B5单元格所在行的下方,图表数据会随原图表数据的更新而更新。其他通报正文设置亦同此理,我就不再重复介绍,直接完成设置。

⑤ 可隐藏通报正文范围外无须用到的单元格区域,例如要隐藏I列及其以后的列,那么用鼠标选中I列,同时按下【Ctrl+Shift+→】三个键,并单击鼠标右键,选中【隐藏】即可,同理,还可隐藏无须用到的行。

⑥ 如果希望隐藏行、列标题,可通过【文件】→【选项】→【高级】,找到【显示行和列标题】的复选框,去除勾选即可。

最终通报正文效果如图所示。

ab4a07826f105530d7b18befba95ca48.png

数据提取自动化

实现从数据库取数,把数据结果追加至Excel相应表中,需要用SQL与VBA语句,主要实现以下几个功能。

★ 打开Access数据库。

★ 输入提取数据的日期。

★ 运行指定的提数SQL语句。

★ 将SQL语句运行的数据结果自动追加到Excel“数据源”表的新记录中。

相关的VBA语句编写如下:

Sub每日数据提取()

'声明定义VBA语句中需要使用到的各个变量类型

Dim AdoConn As New ADODB.Connection '定义变量AdoConn为连接数据库对象(ADODB是数据库访问组件,Connection是其中的一个对象),用于实现连接数据库和关闭数据库连接等操作

Dim MyData As String '定义变量MyData为字符串型变量,用于数据库路径赋值

Dim N As Integer 定义变量N为数值型变量,用于Excel表行数赋值

Dim D1 As Date '定义变量D1为日期型变量,用于数据起始日期赋值

Dim D2 As Date '定义变量D2为日期型变量,用于数据结束日期赋值

' 定义SQL语句所需要的4个字符串型变量,可根据实际需要选择需要声明的变量个数

Dim strSQL1 As String

Dim strSQL2 As String

Dim strSQL3 As String

Dim strSQL4 As String

' InputBox函数的作用是打开输入对话框,提示输入提数日期,并赋值给D1,D2赋值D1+1

D1 = InputBox("请输入需要提数的日期,例如:2011-9-4", "提数日期")

D2 = D1 + 1

' 取第3列第1个空格单元格的行数,并赋值给N

N=ActiveSheet.Range("C1").End(xlDown).Row + 1

指定数据库,可根据实际情况替换双引号内数据库文件名,注意Access数据库文件与Excel文件必须在同一个路径下,如果不是,则须更改为MyData = "D:数据业务数据库.accdb",根据实际情况替换Access数据库文件

MyData =ThisWorkbook.Path & “业务数据库.accdb"

建立数据库连接,打开刚才指定的数据库MyData

With AdoConn

.Provider=“Microsoft.ACE.OLEDB.12.0”

.Open MyData

End With

设置SQL语句,根据实际情况编写和替换

strSQL1= "SELECT count(用户ID)FROM用户明细WHERE注册日期<#"&D2&"#AND注

册日期>=# "&D1& #"

strSQL2= "SELECT count(用户ID)FROM(SELECT DISTINCT用户ID FROM订购明细WHERE

订购日期<#" &D1& "#)"

strSQL3= "SELECT count(订单编号),sum(订购金额)FROM订购明细WHERE订购日期<#"&D2& &D1& "#"

strSQL4= "SELECT count(用户ID)FROM(SELECT DISTINCT用户ID FROM订购明细WHERE

订购日期<# "&D2&“#)"

执行SQL查询,并将查询结果输出到当前表格相应位置,可根据实际情况在相应位置进行调整

ActiveSheet.Cells(N,3).CopyFromRecordset AdoConn.Execute(strSQL1)

ActiveSheet.Cells(N,4).CopyFromRecordset AdoConn.Execute(strSQL2)

ActiveSheet.Cells(N,5).CopyFromRecordset AdoConn.Execute(strSQL3)

ActiveSheet.Cells(N,7).CopyFromRecordset AdoConn.Execute(strSQL4)

关闭数据库连接

AdoConn.Close

释放变量

Set AdoConn = Nothing

MsgBox函数作用是打开输出对话框,以对话框形式提示“数据提取完毕!”

MsgBox “数据提取完毕!”

End Sub

VBA语句执行的步骤,如图所示。

de0515d69396c63182f6726144640840.png

★ 双引号之间的语句是VBA语句中的文本字符串。

★ 井号(#)主要在SQL查询语句中表示数据类型为日期型,通常在数据值两端加上井号(#),这在讲Access数据库SQL语句查询时就介绍过。

★ 连接符(&)在VBA语句中,用于连接各个文本字符串,以组成一串所需的字符串,例如VBA语句中的strSQL1变量所赋值的SQL语句。因为需要根据输入的日期进行数据查询提取,VBA语句中涉及文本字符串与日期参数两种类型的文本。

如果将各个文本字符串与日期参数D1、D2直接连接,而没有进行类别分隔再连接,那么系统会将日期参数D1、D2识别为文本字符串D1、D2,而不是日期参数,这样就不能引用对话框输入的日期进行数据筛选查询,并且还会运行出错。

所以需要将一条完整的SQL语句拆分为各个文本字符串部分,再将各个文本字符串部分与日期参数D1、D2用连接符(&)进行连接组合,使其组合成一串所需的SQL语句,这就好比刚才介绍的“数据转化”表中的通报正文的组合一样,将各个文本字符串按需组合起来。

因为SQL语句要求各个关键字用空格符号分隔,所以在文本字符串与日期参数连接时注意空格符号的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值