excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 收费单打印模块/一步一步带你设计「收费管理系统」14

本文于2023年6月23日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

☆本期内容概要☆

  • 收费单据补打、批量打印

大家好,我是冷水泡茶,前期我们分享了【收费管理系统】的设计过程,已经接近尾声了,今天我们再增加一个功能:收费单据补打。

如果我们在收费结算界面没有打印收费单,或者在结算完毕之后需要再打印的,我们就需要这个功能模块。我们来看一下效果:

我们继续来看制作过程与思路:

在主界面添加命令按钮“单据打印”:

Private Sub CmdPrint_Click()    tempValue = "收费单打印"    Usf_VoucherList.Show    Unload MeEnd Sub

我们点击单据打印,启动“Usf_VoucherList”窗体,与我们“明细查询”是同一个窗体。

我们勾选需要打印的收费单,点打印,即可打印所选择的收费单据。

我们看一下主要代码:

1、命令按钮“打印”:

Private Sub CmdPrint_Click()    Dim numberStr As String    Dim arrNumber()    On Error Resume Next    Application.ScreenUpdating = False    Application.DisplayAlerts = False    ActiveSheet.Visible = xlSheetVisible    With Me.LvVoucherList        For i = 1 To .ListItems.Count            currNumber = .ListItems(i).SubItems(Pxy(sTbtitle, "单号") - 1)            If .ListItems(i).Checked = True Then                '记录符合条件的单号                ReDim Preserve arrNumber(N1)                arrNumber(N1) = currNumber                N1 = N1 + 1            End If        Next    End With    If N1 = 0 Then        MsgBox "未钩选任何单据!"        Exit Sub    End If    '选择打印机,点取消退出    If Application.Dialogs(xlDialogPrinterSetup).Show = False Then        Exit Sub    End If    For i = LBound(arrNumber) To UBound(arrNumber)        Call PrintSingleVoucher(CStr(arrNumber(i)))    Next    Application.ScreenUpdating = True    Application.DisplayAlerts = True    MsgBox ("打印完毕!")    Unload Me    Sheets("Main").ActivateEnd Sub

代码解析:

(1)循环ListView,记下勾选的单号存到数组arrNumber

(2)如果选择的单号数量为0,则退出过程

(3)弹出打印机选择对话框,如果选取消则退出过程

(4)循环数组arrNumber,调用PrintSingleVoucher过程,该过程有一个参数为单号, 这里就是数组的每一个元素。

2、打印过程PrintSingleVoucher的代码(在MyModule2里):

Sub PrintSingleVoucher(BillingNumber As String)   '    Dim arrT(), tbTitle()    Dim amount As Double    SQL = "select * from tb收费明细 where 单号='" & BillingNumber & "'"    arrT = GetData(dataFile, SQL)    tbTitle = GetFields(dataFile, SQL)    Sheets("Print01").Activate    Range("B5:G11").ClearContents    For p = 0 To UBound(arrT, 2)        amount = amount + arrT(Pxy(tbTitle, "金额") - 1, p)        Range("B" & p + 5) = arrT(Pxy(tbTitle, "收费项目") - 1, p)   '收费项目        Range("F" & p + 5) = arrT(Pxy(tbTitle, "金额") - 1, p)  '金额        If arrT(Pxy(tbTitle, "备注") - 1, p) <> "" Then            Range("G5") = Range("G5") & arrT(Pxy(tbTitle, "备注") - 1, p) & Chr(10)  '备注        End If    Next    Range("B3") = "交款人:" & arrT(Pxy(tbTitle, "客户") - 1, 0)    Range("F12") = "收款人:" & arrT(Pxy(tbTitle, "收款人") - 1, 0)    Range("F11") = amount    Range("B11") = "合计(大写):" & JEZH(Range("F11").Value)    Range("G2") = arrT(Pxy(tbTitle, "日期") - 1, 0)    Range("G3") = "№:" & arrT(Pxy(tbTitle, "单号") - 1, 0)    Sheets("Print02").Activate    Range("B4:G11").ClearContents    Range("B2") = "交款人:" & arrT(Pxy(tbTitle, "客户") - 1, 0)    Range("E2") = arrT(Pxy(tbTitle, "日期") - 1, 0)    Range("G2") = "№:" & arrT(Pxy(tbTitle, "单号") - 1, 0)    Range("B16:G23").ClearContents    Range("B14") = "交款人:" & arrT(Pxy(tbTitle, "客户") - 1, 0)    Range("E14") = arrT(Pxy(tbTitle, "日期") - 1, 0)    Range("G14") = "№:" & arrT(Pxy(tbTitle, "单号") - 1, 0)    For p = 0 To UBound(arrT, 2)        Range("B" & p + 4) = arrT(Pxy(tbTitle, "科室") - 1, p)  '科室        Range("B" & p + 4) = arrT(Pxy(tbTitle, "科室") - 1, p)  '科室        Range("C" & p + 4) = arrT(Pxy(tbTitle, "医生") - 1, p)   '医生        Range("D" & p + 4) = arrT(Pxy(tbTitle, "收费项目") - 1, p)   '收费项目        Range("E" & p + 4) = arrT(Pxy(tbTitle, "收款方式") - 1, p)   '收款方式        Range("F" & p + 4) = arrT(Pxy(tbTitle, "金额") - 1, p)  '金额        If arrT(Pxy(tbTitle, "备注") - 1, p) <> "" Then            Range("G4") = Range("G4") & arrT(p, 11) & Chr(10)  '备注        End If        Range("B" & p + 16) = arrT(Pxy(tbTitle, "科室") - 1, p)  '科室        Range("B" & p + 16) = arrT(Pxy(tbTitle, "科室") - 1, p)  '科室        Range("C" & p + 16) = arrT(Pxy(tbTitle, "医生") - 1, p)   '医生        Range("D" & p + 16) = arrT(Pxy(tbTitle, "收费项目") - 1, p)   '收费项目        'Range("E" & p + 16) = arrT(Pxy(tbTitle, "收款方式") - 1, p)   '收款方式        Range("F" & p + 16) = arrT(Pxy(tbTitle, "金额") - 1, p)  '金额        If arrT(Pxy(tbTitle, "备注") - 1, p) <> "" Then            Range("G16") = Range("G16") & arrT(p, 11) & Chr(10)  '备注        End If    Next    Range("F10") = amount    Range("B10") = "合计(大写):" & JEZH(amount)    Range("B11") = "负责人:" & ""    Range("D11") = "主治医师:" & ""    If arrT(Pxy(tbTitle, "渠道") - 1, 0) <> "无" Then        Range("E11") = "收款人:" & arrT(Pxy(tbTitle, "收款人") - 1, 0)        Range("G11") = "介绍人:" & arrT(Pxy(tbTitle, "渠道") - 1, 0)    Else        Range("F11") = "收款人:" & arrT(Pxy(tbTitle, "收款人") - 1, 0)    End If    Range("F22") = amount    Range("B22") = "合计(大写):" & JEZH(amount)    Range("B23") = "负责人:" & ""    Range("D23") = "主治医师:" & ""    If arrT(Pxy(tbTitle, "渠道") - 1, 0) <> "无" Then        Range("E23") = "收款人:" & arrT(Pxy(tbTitle, "收款人") - 1, 0)        Range("G23") = "介绍人:" & arrT(Pxy(tbTitle, "渠道") - 1, 0)    Else        Range("F23") = "收款人:" & arrT(Pxy(tbTitle, "收款人") - 1, 0)    End If    For p = 1 To 2        Sheets("Print0" & p).Activate        ActiveSheet.Cells(1, 1).Select        ActiveSheet.Visible = xlSheetVisible        ActiveSheet.PrintOut Copies:=1   '执行打印        Sheets("Print0" & p).Visible = 0    Next    Sheets("Main").ActivateEnd Sub

代码解析:

(1)根据参数BillingNumber 查询数据库该单号的记录

(2)把记录的相关字段填到Print01,Print02这两张表里并打印出来。

(3)代码看着很长,实际上并不复杂,就是比较繁琐。

(4)在“收费结算”界面,保存后立即打印的功能,也改为调用这个打印过程。

另外,进行了若干代码的调整:

1、“明细查询":改为查询所有明细数据

2、登录界面增加了“数据库文件“路径,双击文本框可以重新选择数据库文件,意味着我们的EXCEL文件与Access数据库文件可以不在一个目录下。

3、把数据库文件路径存到“Settings”表中,作为DataFile的数据源,把所有模块的DataFile取值进行调整。统一到“Settings"表中取。

4、其他一些细节调整,就不多说了。

到这,这个【收费管理系统】基本能用起来了,还有一些细节方面需要再完善,我们下期再说。

好,今天就到这吧。欢迎点赞、留言、分享,谢谢大家,我们下期再会。

☆往期合集☆【2023年3月】【2023年4月】【2023年5月】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接