Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

上节我们演示了如何从金蝶数据库中提取销售明细,销售明细表不是我们的最终目的,我们需要的是各种统计汇总表,从本节开始演示如何一键生成各种汇总表 。
本节目的:一键生成客户销售汇总表 , 并按价税合计降序排序

Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

下面我们构造汇总表的SQL语句:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

需要汇总的字段外面加SUM函数
还需要指定需要汇总的字段,这里是客户,对应的SQL语句如下:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

最后再加上按价税合计降序排列:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

将上面的SQL语句在VBA中构造出来,代码如下:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

刷新一下数据,显示的结果如下图:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

由于汇总表是需要给老板看的,上面的报表显的比较单调,下面我们处理一下格式,让报表变的更加好看 。
格式包括但不限于:
  1. 显示的字体和大?。?/li>
  2. 背景色和前景色;
  3. 表格线;
  4. 行间距和列间距;
首先我们需要确定的是报表一共有多少行,因为不同时期的汇总数据行数可能会有变化 。
Range("A" & Rows.Count).End(xlUp).Row:这个命令的意思是在A列最后一行单元格开始向上移动到非空单元格,也就是最后一行有内容的行数 。上面报表的列数是固定的5列 。
设置标题格式:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

设置表体格式:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

设置网格线:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

设置行间距:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

设置数字格式:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

最终结果如下图:
Excel VBA应用-5:从金蝶数据库提取客户销售汇总表

以上就是从金蝶数据库中一键生成客户销售汇总表的方法,各位有什么想法和疑问可以在评论区中留言,共同探讨 。如果您觉得对工作有帮助,请关注、点赞、留言,让更多的同学交流学习 。
附源代码:
【Excel VBA应用-5:从金蝶数据库提取客户销售汇总表】Option ExplicitPrivate Sub CommandButton1_Click()Dim ado As ObjectDim rst As ObjectDim str As StringDim sql As StringDim dbIP As StringDim dbsa As StringDim dbpwd As StringDim dbname As StringDim 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 rstrst.CloseSet rst = NothingSet 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'行间距为18End 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).AutoFilterEnd Sub

相关经验推荐