上节我们演示了如何从金蝶数据库中提取销售明细,销售明细表不是我们的最终目的,我们需要的是各种统计汇总表,从本节开始演示如何一键生成各种汇总表。
本节目的:一键生成客户销售汇总表,并按价税合计降序排序
下面我们构造汇总表的SQL语句:
需要汇总的字段外面加SUM函数
还需要指定需要汇总的字段,这里是客户,对应的SQL语句如下:
最后再加上按价税合计降序排列:
将上面的SQL语句在VBA中构造出来,代码如下:
刷新一下数据,显示的结果如下图:
由于汇总表是需要给老板看的,上面的报表显的比较单调,下面我们处理一下格式,让报表变的更加好看。
格式包括但不限于:
- 显示的字体和大小;
- 背景色和前景色;
- 表格线;
- 行间距和列间距;
首先我们需要确定的是报表一共有多少行,因为不同时期的汇总数据行数可能会有变化。
Range("A" & Rows.Count).End(xlUp).Row:这个命令的意思是在A列最后一行单元格开始向上移动到非空单元格,也就是最后一行有内容的行数。上面报表的列数是固定的5列。
设置标题格式:
设置表体格式:
设置网格线:
设置行间距:
设置数字格式:
最终结果如下图:
以上就是从金蝶数据库中一键生成客户销售汇总表的方法,各位有什么想法和疑问可以在评论区中留言,共同探讨。如果您觉得对工作有帮助,请关注、点赞、留言,让更多的同学交流学习。
附源代码:
Option Explicit
Private Sub CommandButton1_Click()
Dim ado As Object
Dim rst As Object
Dim str As String
Dim sql As String
Dim dbIP As String
Dim dbsa As String
Dim dbpwd As String
Dim dbname As String
Dim rs As Integer
'清屏
Range("4:" & Rows.Count).Clear
'如果没有录入查询年度和月份,退出
If Val(Range("B1")) = 0 Or Val(Range("D1")) = 0 Then Exit Sub
'如果有自动筛选,先取消自动筛选
If ActiveSheet.AutoFilterMode Then Range("A3").AutoFilter
'设置数据库连接字符串
dbIP = "(local)" '安装数据库的电脑IP地址,(local)代表本机
dbsa = "sa" 'SQLServer数据库的登录用户名
dbpwd = "123456" 'SQLServer数据库的登录密码
dbname = "AIS20210318095953" '需要提取数据的金蝶数据库名
str = "Provider=SQLOLEDB.1;"
str = str & "Data Source=" & dbIP & ";"
str = str & "Persist Security Info=True;"
str = str & "User ID=" & dbsa & ";"
str = str & "Password=" & dbpwd & ";"
str = str & "Initial Catalog=" & dbname & ";"
'建立数据库连接
Set ado = CreateObject("ADODB.Connection")
ado.Open str
'构造提取数据的SQL语句
sql = "Select d.FName,SUM(a.FQty),SUM(a.FAmount),SUM(a.FTaxAmount),SUM(a.FAmountincludetax) "
sql = sql & "From ICSaleEntry a left join ICSale b on a.FInterID=b.FInterID "
sql = sql & "left join t_Organization d on b.FCustID=d.FItemID "
sql = sql & "WHERE Year(b.fdate) = " & Range("B1") & " And Month(b.fdate) = " & Range("D1") & " "
sql = sql & "GROUP By d.FName "
sql = sql & "ORDER BY SUM(a.FAmountincludetax) DESC "
Set rst = ado.Execute(sql)
If Not rst.EOF Then Range("A4").CopyFromRecordset rst
rst.Close
Set rst = Nothing
Set ado = Nothing
'*******************设置报表格式*******************
'取消工作表显示网格线
ActiveWindow.DisplayGridlines = False
'先设置报表标题
With Range("A3:E3")
.Font.Name = "微软雅黑" '字体名称
.Font.Size = 11 '字体大小
.Font.Color = RGB(255, 255, 255) '字体颜色
.Interior.Color = RGB(72, 99, 156) '背景色
.HorizontalAlignment = xlCenter '水平居中
.VerticalAlignment = xlCenter '垂直居中
End With
'设置表体格式
With Range("A4:E" & Range("A" & Rows.Count).End(xlUp).Row)
.Font.Name = "宋体" '字体名称
.Font.Name = "Calibri" '数字使用的字体名称
.Font.Size = 11 '字体大小
.VerticalAlignment = xlCenter '垂直居中
End With
'设置表格
With Range("A3:E" & Range("A" & Rows.Count).End(xlUp).Row)
.Borders.LineStyle = 1 '网格线为实线
.Borders.Color = RGB(221, 221, 221) '网格线颜色
End With
'设置行高
With Range("3:" & Range("A" & Rows.Count).End(xlUp).Row)
.RowHeight = 18 '行间距为18
End With
'设置数字格式
With Range("B4:E" & Range("A" & Rows.Count).End(xlUp).Row)
.NumberFormatLocal = "0.00;;;" '数字格式为2位小数,为0时不显示
End With
'提取数据后加上自动筛选
Range("A3").Resize(1, Range("A3").End(xlToRight).Column).AutoFilter
End Sub