ad

《Excel VBA+SQL数据管理与应用模板开发》_7.3.2 按合同进度制作统计报表

网友投稿 116 2023-11-07

【摘要】 本书摘自《Excel VBA+SQL数据管理与应用模板开发》一书中第7章,第3节,韩小良著。

7.3.2 按合同进度制作统计报表

也许我们需要了解以下信息:哪些合同执行完毕了?哪些合同还未开发票?哪些合同还 有应付款? … … 对于这样的报表,也可以通过设计一个自动化程序来实现。

根据合同进度情况,分成以下7种情况。

《Excel VBA+SQL数据管理与应用模板开发》_7.3.2 按合同进度制作统计报表

● 合同执行完毕

● 未全额开票

● 未全额付款

● 全额开票、未全额付款

● 未全额开票、全额付款

● 未全额开票、未全额付款

● 未开票、未付款

因此,需设计一个可以选择不同进度类型报表的窗口,如图7-45所示。窗体的名称和 Caption 属性均为“供货商合同进度跟踪”。

“供货商合同进度跟踪”窗体的功能是:选择需要了解的进度类型,即可得到在该进度 的所有供货商合同汇总表,同时还可以了解某个供货商的开票和付款情况。

“供货商合同进度跟踪”窗口的各个控件说明如表7-13所示。

窗体的初始化程序如下:

Private Sub UserForm_Initialize)

Dim rs As New ADODB.Recordset

Dim SQL As String

'指定工作表对象

Set wsCon =ThisWorkbook.Worksheets("合同信息")

Set wslnv =ThisWorkbook.Worksheets("发票信息")

Set wsPay =ThisWorkbook.Worksheets("付款信息")

Set ws =ThisWorkbook.Worksheets("供货商合同跟踪")

'清除汇总表旧数据

ws.Select

ws.Range("A6:BA1000").Clear

'建立与工作簿的连接

With cnn

Provider ="microsoft.ace.oledb.12.0"

.ConnectionString ="Extended Properties=Excel 12.0;Data Source="_

&ThisWorkbook.FullName

.Open

End With

'清除供货商列表的旧数据

供货商名称列表.RowSource =""

End Sub

为“查询”按钮设置Click 事件,当单击此按钮时,按照选择的进度类型进行查询。程 序代码如下:

Private Sub 查询_Click0

Dim i As Integer,n As Integer,k As Integer

Dim ID As String

Dim 供货商 As String

Dim 合同额As Currency,发票总额 As Currency,付款总额 As Currency

Dim rs As ADODB.Recordset

Dim SQL As String

判断是否选择了进度类型选项按钮

If 合同执行完毕.Value=False And 未全额开票.Value =False_

And 未全额付款.Value =False_

And 全额开票未全额付款.Value=False And未全额开票全额付款.Value =False_ And 未全额开票未全额付款.Value=False And未开票未付款.Value =False Then

MsgBox"没有选择统计的类型!"vbCritical," 警告"

Exit Sub

End If

清除查询表的旧数据

ws.Range("A6:BA1000").Clear

ws.Range("K2")=""

供货商名称列表.RowSource =""

n=wsCon.Range("A10000").End(xlUp).Row

'开始查询满足条件的合同信息

k =6

Fori=2 To n

ID=wsCon.Range("A"&i)

合同额= wsCon.Range("F"&i)

发票总额=WorksheetFunction.Sumlf(wsInv.Range("A:A"),ID,_

wslnv.Range("H:H"))

付款总额=WorksheetFunction.Sumlf(wsPay.Range("A:A"),ID,_

wsPay.Range("F:F"))

If 合同执行完毕.Value =True Then

con= (合同额=发票总额 And 合同额=付款总额)

ws.Range("A4")= 合同执行完毕.Caption

Elself 未全额开票.Value =True Then

con= (合同额◇发票总额)

ws.Range("A4")= 未全额开票.Caption

Elself 未全额付款.Value =True Then

con =(合同额◇付款总额)

ws.Range("A4")= 未全额付款.Caption

Elself 全额开票未全额付款.Value =True Then

con= (合同额=发票总额And 合同额>付款总额)

ws.Range("A4")= 全额开票未全额付款.Caption

Elself 未全额开票全额付款.Value =True Then

con= (合同额>发票总额 And 合同额=付款总额)

ws.Range("A4")= 未全额开票全额付款.Caption

Elself 未全额开票未全额付款.Value =True Then

con =(合同额>发票总额 And 合同额<>付款总额)

ws.Range("A4")= 未全额开票未全额付款.Caption

Elself未开票未付款.Value =True Then

con =(发票总额=0 And 付款总额=0)

ws.Range("A4")= 未开票未付款.Caption End If

If con =True Then

With ws

wsCon.Range("C"&i&":D"&i).Copy wsCon.Range("A"&i&":B"&i).Copy wsCon.Range("E"&i&":H"&i).Copy Range("I"&k)= 发票总额

.Range("J"&k)= 付款总额

Destination:=.Range("A"&k)

Destination:=.Range("C"&k)

Destination:=.Range("E"&k)

.Range("K"&k)=.Range("F"&k)-.Range("I"&k)

.Range("L"&k)=.Range("F"&k)-.Range("J"&k)

k=k+1

End With

End If

Next i

'设置单元格格式,并把供货商名称填写到供货商列表

With ws

.Range("F:F,I:L").NumberFormat ="#,##0.00"

.Range("G:H").NumberFormat ="yyyy-m-d"

If.Range("D1000").End(xIUp).Row >5 Then

供货商名称列表.RowSource=" 供货商合同跟踪!D6:D"&.Range("D1000").End(xIUp).

Row

Else

供货商名称列表.RowSource =""

End If

.Range("A6:L"&.Range("D1000").End(xlUp).Row).Borders.Weight =xlThin

End With

End Sub

启动窗体,选择进度类型,单击“查询”按钮,即可得到图7-46所示的效果,同时在 工作表中得到这个进度类型的合同报表

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_3.1 常用语句 函数方法
下一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_3.1.2 IIF 函数的语法及用法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×