excel学习库

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

Excel VBA 停车收费确认单连续编号打印

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

内容提要

  • 设置用户窗体

  • 循环设置连续编号并打印

大家好,我是冷水泡茶,昨天微信上有一朋友问我,编号递增可以做吗?

他的表格是这样的,下面还有一张一样的,只不过序号增加1号:

在我们分享过的【Excel VBA 凭证打印】一文中,我们把凭证按照凭证号逐条写入凭证打印模板,然后打印,凭证号也是不断变化的,不同的是,当下这个案例,编号是在上次编号的基础上递增。

感觉应该是不难,通过循环,把编号后面连续的数字递增,写入单元格,然后打印,再进行下一张......

昨天晚上按我自己的理解基本做好,但由于后面几位数字的编码规则理解有误,今天上午又调整、优化了一下,交差。

据说效果还不错,在征得他的同意后,我把这个案例在公众号分享给大家:

基本思路:

1、通过输入起始编号与结束编号,循环打印。

2、起始编号,我们可以读取当前表中的编号,加上1作为新的起始编号。

3、我们设置一个编号数量,根据起始编号加上编号数量,可以计算出结束编号的值。

4、由于编号中包含前缀,不是纯数字,我们可以把前缀提取出来,在打印的时候再与数字编号拼接成统一格式的完整编号。

5、我们设置一个用户窗体,把上述数据以文本框、标签、组合框等控件放置在用户窗体上:

VBA代码

1、在用户窗体,UserForm_Initialize窗体初始化:

Dim firstPart As StringDim ws As WorksheetPrivate Sub UserForm_Initialize()    Dim lastNo As String    Dim lastNumber As Integer    On Error Resume Next    Set ws = ThisWorkbook.ActiveSheet    lastNo = ws.Range("D18")    lastNumber = CInt(Right(lastNo, 5))    firstPart = Left(lastNo, 6)    Me.TxbFirstPart = firstPart    With Me.CmbYear        .Clear        .AddItem Year(Date) - 1        .AddItem Year(Date)        .AddItem Year(Date) + 1        .Text = Year(Date)    End With    With Me.CmbNumbers        For i = 2 To 100 Step 2            .AddItem i        Next        .Text = 100    End With    Me.TxbBeginNo = lastNumber + 1    Me.LbEndNo = CInt(Me.TxbBeginNo) + CInt(Me.CmbNumbers) - 1End Sub

代码解析:

(1)定义一些变量。

(2)line8,读取最后一次完整编号lastNo。

(3)line9,取得编号的数字部分lastNumber,这里根据编号规则来,它是“年度”+5位数字。

(4)line10~11,取得编号的前缀部分,是6位文本,存入文本框,可以修改,但最好保持6位,否则下次再打印仍要修改。当然,最好是保持不变。

(5)line12~18,“年度”组合框赋值,设置当前年度加上前后年度,默认为当前年度。

(6)line19~24,打印号数,预置100个号码,默认100(因为本次他要打印100号),可以修改。由于每张纸打印两个号码,所以打印号数都为偶数,从2开始循环,设置步长为2,给组合框添加下拉列表。

(7)line25~26,设置起始编号为上次编号数字+1,再设置结束编号。

2、在用户窗体,CmdPrint_Click打印按钮:

Private Sub CmdPrint_Click()    Application.ScreenUpdating = False    On Error Resume Next    Dim currNo As String    Dim num As Integer    num = CInt(Me.LbEndNo) - CInt(Me.TxbBeginNo) + 1    If num Mod 2 = 1 Then        MsgBox "请增加号减少一个编号!"        Exit Sub    End If    If Not wContinue("即将打印【" & Me.CmbYear & "】" & Me.TxbBeginNo & "-" & Me.LbEndNo & "号!确认单!" & Chr(10)) Then Exit Sub    If Application.Dialogs(xlDialogPrinterSetup).Show = False Then        Exit Sub    End If    With ws.PageSetup        .Zoom = False        .FitToPagesWide = 1  '//页宽是一页        .FitToPagesTall = 1  '//页高是1页        .PaperSize = xlPaperA4  '//纸张大小    End With    For i = CInt(Me.TxbBeginNo) To CInt(Me.LbEndNo)        k = k + 1        currNo = firstPart & Me.CmbYear & Format(i, "00000")        Debug.Print currNo        If k Mod 2 Then            ws.Range("d3") = currNo        Else            ws.Range("D18") = currNo            ws.PrintOut copies:=1        End If    Next    Application.ScreenUpdating = True    Unload MeEnd Sub

代码解析:

(1)定义一些变量。

(2)line6~10,检查输入的打印编号数是不是偶数。这段代码是在前一版本的代码,后来调整了控件,目前也可以直接判断打印号数CmbNumbers是否为偶数。

(3)line11,给出一个确认提示,防止误操作。

(4)line12~14,显示选择打印机对话框。

(5)line15~20,设置页面为A4大小,1页。最好先在Excel界面,手工把页面设置为1页,以免格式错乱。

(6)line21~31,循环起始编号到结束编号,由于每页要打印两个号,所以这里特别处理一下,当循环到奇数次的时候,编号填在上半张编号位置,当循环至偶数次数的时候,编号填在下半张编号位置,并打印出来,这也是为何打印号数必须是偶数的原因,否则最后一号可能打印不出来。

3、在用户窗体,其他过程

Private Sub CmbNumbers_Change()    If Me.TxbBeginNo = "" Then Exit Sub    Me.LbEndNo = CInt(Me.TxbBeginNo) + CInt(Me.CmbNumbers) - 1End SubPrivate Sub TxbBeginNo_Change()    If Me.TxbBeginNo = "" Then Exit Sub    If Me.CmbNumbers = "" Then Exit Sub    Me.LbEndNo = CInt(Me.TxbBeginNo) + CInt(Me.CmbNumbers) - 1End SubPrivate Sub CmdExit_Click()    Unload MeEnd SubFunction wContinue(Msg) As Boolean    '确认继续函数    Dim Config As Long    Config = vbYesNo + vbDefaultButton2 + vbQuestion    Ans = MsgBox(Msg & Chr(10) & "是(Y)继续?" & Chr(10) _        & "否(N)返回!", Config, "请确认操作!")    wContinue = Ans = vbYesEnd Function

代码解析:

(1)line1~4,打印号数change事件,计算结束编号。

(2)line6~10,起始编号change事件,计算结束编号。

(3)line12~14,退出按钮。

(4)line16~23,确认继续函数,这个函数我们分享过多次了,经常会用到。

来一个动画演示

~~~~~~End~~~~~~

发表评论:

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

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