vba monthview控件64位_用VBA批量格式打印座位号 |VBA应用

e34da16a971049c92bb58495e20feb4f.png

不了解VBA的读者可以移步VBA| 教你用excel实现随机点名(点击进入),本期进一步介绍其应用。

15bb722b17a6d96fd82a7bd4c00d85fd.png

我们在组织考试时,通常先要安排考号,之后书写或打印座位号,粘贴在每位考生的课桌上。我们学校之前在书写座位号时,经常用毛笔,将表示座位号的数字写在一张张小纸片上,按场次分发给各班张贴,这样不但工作量大,而且信息量单一,也很不规范。

自从几年前用了我的小程序之后,工作效率和质量发生了明显变化,下图就是实地拍摄的课桌上的贴好的座位号的例子:

97951a9272c4fce34c5717619d59e56d.png

一张小小的纸片上包含了以下信息:考号、场次、班级、姓名

这样设计的好处显而易见:

  1. 制作高效,只需预先输入好学生名单,就可一键打印;

  2. 规范;

  3. 信息完整,方便现场统计缺考考生,也能防止考生选错座位;

055b680956bb37ec14311b660d4951a4.png

代码编写

首先新建一个空白表(或使用现成的空白表),改名为“课桌考号”:

c1b66bbf595698007887c172299b5ced.png

然后按Alt+F11进入basic编辑界面,新建一个窗体,按如下的布局组织控件:

f2f804f06658367159dd1dc534d63cac.png

这里关键的几个控件的名称——

学校名称对应的text控件更名为:TextBox学校

年级名称对应的ComboBox控件更名为:ComboBox年级

学段对应的ComboBox控件更名为:ComboBox学段

在“考号样式”里,分别预留了3个打印样式,依次是:

Option3列3or4位,

Option2列5or6位,

Option2列8or9位。

在“备注行导引字符”对应的ComboBox控件更名为:

ComboBox引导。

最后“开始”按钮的名称改为:CommandButton开始。

双击“开始”按钮,在代码窗口中,将以下代码复制并粘贴进去:

(滑动阅读)

Private Sub CommandButton开始_Click()

C表 = ""

For Each Sh In Sheets

    If Sh.Name = "课桌考号" Then

        C表 = "课桌考号"

        Exit For

    End If

Next

If C表 = "" Then

    MsgBox "没有找到表:“课桌考号”,请将盛放原考号的表改名."

    Exit Sub

End If

For Each Sh In Sheets

    If Sh.Name = "考号打印" Then

        Application.DisplayAlerts = False

        Sheets("考号打印").Delete

        Application.DisplayAlerts = True

        Exit For

    End If

Next

With Worksheets

    Set Sh = .Add(after:=Worksheets(.Count))

    Sh.Name = "考号打印"

End With

lie考号 = MYfound_lie(C表, 1, "考号")

If lie考号 = 0 Then

    MsgBox "没有发现字段:考号 !"

    Exit Sub

End If

lie班级 = MYfound_lie(C表, 1, "班级")

If lie班级 = 0 Then

    MsgBox "没有发现字段:班级 !"

    Exit Sub

End If

lie场 = MYfound_lie(C表, 1, "场")

If lie场 = 0 Then

    MsgBox "没有发现字段:场 !"

    Exit Sub

End If

lie姓名 = MYfound_lie(C表, 1, "姓名")

If lie姓名 = 0 Then

    MsgBox "没有发现字段:姓名 !"

    Exit Sub

End If

myhang1 = ThisWorkbook.Worksheets(C表).UsedRange.Rows.Count  '工作表中已使用的行数

mylie1 = 4 ' ThisWorkbook.Worksheets(C表).UsedRange.Columns.Count

'就(场、考号)排序

ThisWorkbook.Worksheets(C表).Select

C字段数 = my字段转换(mylie1)

C字段场 = my字段转换(lie场)

C字段考号 = my字段转换(lie考号)

Range("A1:" & C字段数 & myhang1).Select

    Selection.Sort Key1:=Range(C字段场 & 2), Order1:=xlAscending, Key2:= _

    Range(C字段考号 & 2), Order2:=xlAscending, Header:=1, OrderCustom:=1, _

    MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, _

    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

ThisWorkbook.Worksheets("考号打印").Select

'cnj = InputBox("请输入年级", " ")

Ckh = "☆ " & TextBox学校.Text & ComboBox年级.Value & ComboBox学段 & " ☆ (" & Date & ")"

If Option3列3or4位.Value = True Then

    a = 3

    Else

    a = 2

End If

'While a < 2 Or a > 3

'MsgBox "数字范围有误,重新输入吧"

'a = InputBox("打印2列,还是3列?" & Chr(13) & "(考号位数3,或4,请使用3列;" & Chr(13) & "  考号位数5,或6,请使用2列)", "请选择列数", 3)

'Wend

If a = 2 Then 'A4竖排2列

    '格式化 列

    Columns("A:A").HorizontalAlignment = xlCenter

    Columns("D:D").HorizontalAlignment = xlCenter

   '   Selection.Font.Bold = True

    Columns("A:A").ColumnWidth = 42 '38 '宽列

    Columns("B:C").ColumnWidth = 3 '窄列

    Columns("D:D").ColumnWidth = 42 '38

    Columns("B:B").Select

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

         .Weight = xlHairline

    End With

    With ThisWorkbook.Worksheets("考号打印").Rows("1:" & myhang1 * 4)

        .RowHeight = 16

        .Font.Name = "楷体_GB2312"

        .Font.Bold = False

        .Font.Size = 12

    End With

    h = 1

    i = 1

    n场0 = ThisWorkbook.Worksheets(C表).Cells.Item(2, lie场).Value

    While i <= myhang1 - 1

        Nlie = 1

        ThisWorkbook.Worksheets("考号打印").Rows(4 * h - 2 & ":" & 4 * h - 2).RowHeight = 105

        With ThisWorkbook.Worksheets("考号打印").Range("A" & 4 * h - 2 & ":D" & 4 * h - 2).Font

            .Name = "黑体"

        If Option2列8or9位.Value = True Then ''8或9位

         .Size = 36

        ElseIf Option2列5or6位.Value = True Then '5或6位

         .Size = 66

         Else '3或4位

         .Size = 60

        End If

         '   .Size = 72

            .Bold = True

        End With

        'Selection

        ThisWorkbook.Worksheets("考号打印").Rows(4 * h - 2 & ":" & 4 * h - 2).VerticalAlignment = xlBottom '纵向对齐:靠下

        With ThisWorkbook.Worksheets("考号打印").Rows(4 * h & ":" & 4 * h).Borders(xlEdgeBottom)

            .LineStyle = xlContinuous

            .Weight = xlHairline

        End With

            n场0 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie场).Value

        Do

            N考号 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie考号).Value

            N班级 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie班级).Value

            n场 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie场).Value

            N姓名 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie姓名).Value

            C信息 = ComboBox引导.Value & "第" & n场 & "场/ " & N班级 & "班/ " & N姓名

            ThisWorkbook.Worksheets("考号打印").Cells.Item(4 * h - 2, Nlie).Value = "'" & N考号

            'ThisWorkbook.Worksheets("考号打印").Cells.Item(4 * h - 2, Nlie).NumberFormatLocal = "@"

            ThisWorkbook.Worksheets("考号打印").Cells.Item(4 * h - 1, Nlie).Value = C信息

            Nlie = Nlie + 3

            i = i + 1

        Loop Until Nlie > 4

        h = h + 1

    Wend

Else 'A4竖排 3列

    '格式化 列

    Columns("A:C").HorizontalAlignment = xlCenter

    Columns("A:C").ColumnWidth = 30 '列

    Columns("B:B").Select

    With Selection.Borders(xlEdgeLeft)

        .LineStyle = xlContinuous

        .Weight = xlHairline

 '       .ColorIndex = xlAutomatic

    End With

    With Selection.Borders(xlEdgeRight)

        .LineStyle = xlContinuous

         .Weight = xlHairline

        '.ColorIndex = xlAutomatic

    End With

    With ThisWorkbook.Worksheets("考号打印").Rows("1:" & myhang1 * 4)

        .RowHeight = 16

        .Font.Name = "楷体_GB2312"

        .Font.Size = 12

        .Font.Bold = False

    End With

    h = 1

    i = 1

'    n场0 = ThisWorkbook.Worksheets(C表).Cells.Item(2, lie场).Value

    While i <= myhang1 - 1

        Nlie = 1

        ThisWorkbook.Worksheets("考号打印").Rows(4 * h - 2 & ":" & 4 * h - 2).RowHeight = 105

        With ThisWorkbook.Worksheets("考号打印").Range("A" & 4 * h - 2 & ":C" & 4 * h - 2).Font

            .Name = "黑体"

            .Size = 72

            .Bold = True

        End With

        ThisWorkbook.Worksheets("考号打印").Rows(4 * h - 2 & ":" & 4 * h - 2).VerticalAlignment = xlBottom '纵向对齐:靠下

        With ThisWorkbook.Worksheets("考号打印").Rows(4 * h & ":" & 4 * h).Borders(xlEdgeBottom)

            .LineStyle = xlContinuous

            .Weight = xlHairline

        End With

        n场0 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie场).Value

        Do

            N考号 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie考号).Value

            N班级 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie班级).Value

            n场 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie场).Value

            N姓名 = ThisWorkbook.Worksheets(C表).Cells.Item(i + 1, lie姓名).Value

            C信息 = ComboBox引导.Value & "第" & n场 & "场/ " & N班级 & "班/ " & N姓名

           ' If Ch分页否.Value = True Then

                If n场0 <> n场 Then

                   Exit Do

                Else

                    ThisWorkbook.Worksheets("考号打印").Cells.Item(4 * h - 2, Nlie).Value = "'" & N考号

                    ThisWorkbook.Worksheets("考号打印").Cells.Item(4 * h - 2, Nlie).NumberFormatLocal = "@"

                    ThisWorkbook.Worksheets("考号打印").Cells.Item(4 * h - 1, Nlie).Value = C信息

                    Nlie = Nlie + 1

                    i = i + 1

                End If

        Loop Until Nlie > 3

        h = h + 1

    Wend

End If

'页面设置

ThisWorkbook.Worksheets("考号打印").Select

With ActiveSheet.PageSetup

    .PrintTitleRows = ""

    .PrintTitleColumns = ""

End With

ActiveSheet.PageSetup.PrintArea = ""

With ActiveSheet.PageSetup

    .LeftHeader = Ckh

    .CenterHeader = ""

    .RightHeader = ""

    .LeftFooter = ""

    .CenterFooter = ""

    .RightFooter = ""

    .LeftMargin = Application.InchesToPoints(0.196850393700787) '以磅为单位

    .RightMargin = Application.InchesToPoints(0.196850393700787) '以磅为单位

    .TopMargin = Application.InchesToPoints(0.25) '以磅为单位

    .BottomMargin = Application.InchesToPoints(0.25) '以磅为单位

    '1磅等于1/72英寸(即1皮卡),或大约等于1厘米的1/28

    '我们可以使用CentimetersToPoints方法就可以实现“厘米”直接转“磅”代码写成:.TopMarginApplication.CentimetersToPoints (2)

    .HeaderMargin = Application.InchesToPoints(0)

    .FooterMargin = Application.InchesToPoints(0)

    .PrintHeadings = False '同时打印行标题和列标题

    .PrintGridlines = False

    .PrintComments = xlPrintNoComments

    '.PrintQuality = 200 '返回或设置打印质量

    .CenterHorizontally = False

    .CenterVertically = False

    .Orientation = xlPortrait '返回或设置一个XlPageOrientation值,它代表纵向或横向打印模式。此属性与“方向”选项对应

    .Draft = False '不打印工作表中的图形

    .PaperSize = xlPaperA4

    .FirstPageNumber = xlAutomatic '返回或设置打印指定工作表时第一页的页号如果设为xlAutomatic,则MicrosoftExcel采用第一页的页号?默认值为xlAutomatic  Long类型,可读写。此属性与“起始页码”选项对应。

    .Order = xlDownThenOver

    .BlackAndWhite = False '黑白方式打印否

    .Zoom = 100 '缩放比例

    .PrintErrors = xlPrintErrorsDisplayed

End With

Cells.Select

Selection.NumberFormatLocal = "0_ " '设置数值格式为0位小数

Unload Me

MsgBox "考号导出完毕!"

ThisWorkbook.Worksheets("考号打印").Cells.Item(1, 1).Select

End Sub

Private Sub UserForm_Activate()

TextBox学校.Text = "19中学 "

ComboBox年级.Clear

ComboBox年级.AddItem "初一年级 "

ComboBox年级.AddItem "初二年级 "

ComboBox年级.AddItem "初三年级 "

ComboBox年级.AddItem "高一年级 "

ComboBox年级.AddItem "高二年级 "

ComboBox年级.AddItem "高三年级 "

ComboBox学段.Clear

ComboBox学段.AddItem "期中考试"

ComboBox学段.AddItem "期末考试"

ComboBox学段.AddItem "月考"

ComboBox引导.Clear

ComboBox引导.AddItem "☆"

ComboBox引导.AddItem "★"

ComboBox引导.AddItem "□"

ComboBox引导.AddItem "■"

ComboBox引导.AddItem "△"

ComboBox引导.AddItem "▲"

ComboBox引导.AddItem "◆"

ComboBox引导.AddItem "※"

ComboBox引导.AddItem "#"

ComboBox引导.Value = "■"

myhang1 = ThisWorkbook.Worksheets("课桌考号").UsedRange.Rows.Count  '工作表中已使用的行数

L考号 = MYfound_lie("课桌考号", 1, "考号")

N考号 = Val(ThisWorkbook.Worksheets("课桌考号").Cells.Item(2, L考号).Value)

For i = 2 To myhang1 Step 10

    kh = Val(ThisWorkbook.Worksheets("课桌考号").Cells.Item(i, L考号).Value)

    If kh > N考号 Then N考号 = kh

Next i

Nweishu = Len(Trim(Str(N考号)))

If N考号 < 10000 Then

    Option3列3or4位.Value = True

ElseIf N考号 < 10000000 Then

    Option2列5or6位.Value = True

Else

    Option2列8or9位.Value = True

End If

End Sub

Private Sub UserForm_Click()

End Sub

新建一个模块,输入以下代码:

(滑动阅读)

Sub 导出考号()

'检查表"考号打印"是否存在,若存在就删除重新添加一个

form打印参数.Show

End Sub

Sub 竞赛考号打印()

'检查表"考号打印"是否存在,若存在就删除重新添加一个

UserForm竞赛.Show

End Sub

Function MYfound_lie(C_biao, n_hang, C_xm)

'在Cbiao 指定表中的指定行 n_hang 查找对应 名称C_xm 所在列

lyou = False '是否有lskey

For Each Sh In Worksheets

    If Sh.Name = C_biao Then

        lyou = True

        Exit For

    End If

Next

If lyou = False Then

    MsgBox "没有找到表" & C_biao

    MYfound_lie = 0

    Exit Function

End If

Mylie11 = ThisWorkbook.Worksheets(C_biao).UsedRange.Columns.Count '工作表中已使用的列数

MYfound_lie = 0

For Ni = 1 To Mylie11

    If ThisWorkbook.Worksheets(C_biao).Cells.Item(n_hang, Ni) = C_xm Then '''''''''

        MYfound_lie = Ni

        Exit For

    End If

Next Ni

End Function

Function my字段转换(L列)

zfj = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

n = Int(L列 / 26)

ny = L列 Mod 26

If ny = 0 Then

    n = n - 1

    ny = 26

End If

If n > 0 Then

    my字段转换 = Mid(zfj, n, 1) & Mid(zfj, ny, 1)

Else

    my字段转换 = Mid(zfj, ny, 1)

End If

End Function

下面为该功能指定一个入口,回到excel的任意一个空白表中,插入一个按钮或绘制一个自己认为合适的图形,右击,指定宏:

0b225b02a428fd0a0449fc352c2028f9.png

找到“导出考号”,选中并确定返回(这里的已经在模块代码中预先定义过“导出考号”这个过程了,因此在这里会看到它)。

028048ffe73dce72deaf89c99c9d06a1.png

至此,代码编写完毕。

打印座位号

首先在“课桌考号”表中灌入你要打印的学生名单,注意按“场、姓名、班级、考号”字段(表的第一行)指定,不要随意更改。然后点击你刚才自定义的按钮,就会弹出如下对话窗体:

e98e72149dde0b9f2febb97c8607bbfc.png

这里要根据本校学生考号的位数,选择对应的样式

94095561277f4dfa6725062b4ae134cc.png

其他项目根据需要填写即可。

等一切准备就绪,点击“开始”按钮。

系统会自动生成一个名为“考号打印”的新表,表中的内容如下,其中座位号之间用虚线分割,方便将来裁剪。下图是在excel中未打印时的预览图:

9121569ac5c6af1dc0267b8b767dc362.png

下面转备好打印机和一定量的A4打印纸,利用excel自带的打印功能,直接打印就可以了。

以上打印的座位号时按照场次逐场打印的,打印完成后,分发给各班并沿打印纸的虚线剪开,就得到一张张座位号了。

往期精彩 不容错过
  1. 2020年最新高考过渡时期数学学科考试范围说明

  2. 几种圆柱侧面展开动画演示 | 几何画板

  3. 解密“侧面展开的一种做法” | 几何画板

  4. 说说新高考赋分

  5. 动画分享:无限正方形 | 几何画板与GeoGebra对照编写

  6. 任意四边形变长方形 | 几何画板与GeoGebra对照编写

  7. 荐读 | 庚子赔款与清华园

  8. 几何画板晋级之路(12) | 将动画进行到底

  9. PPT | 好课件的一般“标准”

  10. 教学随笔 | “三维坐标法”判断复合函数零点个数

  11. 几何画板 | 网红动图演绎:π的直观解释

  12. 几何画板 | 放大镜效果的制作

  13. 几何画板晋级之路(10)|图片操作(2)

  14. 几何画板晋级之路(6)|3D平台初步(1)

  15. PPT |班主任素质大赛课件示例

  16. PPT |高中数学说课课件示例

  17. 几何画板晋级之路(3)|迭代——挑战操作的极限

  18. 几何画板晋级之路|参数——动态几何的灵魂

  19. PPT课件| 封面就是一张脸,你要不要

  20. 高中数学始业教育PPT、word文档+初高中衔接教材(3套),课件资源一网打尽

  21. 培训笔记 | 提高教学技能,追求业务精湛

  22. VBA| 教你用excel实现随机点名

  23. 河北2019中考画板演绎合集(提供源文件)

  24. PPT | 形状的布尔运算简介

(技术交流,请先关注,后台输入“作者”)

6edc30aa4520372863db8d773c41dd8c.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值