高分冷门英剧:在Excel中用宏命令制作打印表单

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 08:02:38

这是一张通过Office办公软件Excel电子表格宏制作的单据打印表,其特点是:①操作简单只用鼠标就可完成打印全过程;②“商品单价”表可由厂家提供(或预先做好),对已做过选择的内容可进行标记;③“销售单”表可进行快速添加、清除和修改;④单据可选择性的保存。

本表想不到还很实用,只要在“商品单价”表中双击就可以把数据填入到“销售表”中,如果把它做一些小的改动就可用在其它的单据打印上。现在把制作步骤写下来,让朋友对它做进一步的改进。

1、第一步:首先新建一个Excel电子表文件,在新建的文件中建立二张名字为“商品单价”和“销售单”的表。

在“商品单价”表中是用来存放厂家提供的商品单价数据,只要将厂家的商品单价输入好即可,厂家的商品未调价就不需做修改(如图1)。


2、第二步:在“销售单”表中按图2输入有关数据,部分单元格公式输入如下。

在C1至C3单元格中分别输入 =IF(K15="","",K15), =IF(L1="","",L1)&IF(K1="","",K1),IF(K2="","",K2)

在B5至B15单元格中分别输入 =IF(K5="","",K5), ……, =IF(K15="","",K15)

在C5至C15单元格中分别输入 =IF(B5="","",VLOOKUP(B5,spdj,2,FALSE)), …… =IF(B15="","",VLOOKUP(B15,spdj,2,FALSE))

在I5至I15单元格中分别输入    =F5*G5 , =F6*G6 ……   =F14*G14 和 =SUM(I5:I14)

在单元格G2 G3中分别输入  =TODAY(),=IF(K3="","",K3)

在单元格C15中输入    ="合计金额(大写):"&TEXT(INT(ABS(I15)),"[dbnum2]g/通用格式")&"元"&TEXT(INT(ABS(I15*10))-INT(ABS(I15))*10,"[dbnum2]g/通用格式")&"角"&TEXT(INT(ABS(I15*100))-INT(ABS(I15)*10)*10,"[dbnum2]g/通用格式")&"分整"

在单元格C16 C17 G17中分别输入   =IF(K4="","",K4), =IF(K17="","" , K17), =IF(K16="","",K16)

其余的输入就不用我介绍了。而后创建四个按钮,点击“视图”——“工具栏”——“控件工具箱”——“设计模式”——“命令按钮”创建完再点“退出命令按钮”。做一下打印页面设置,锁定该表(如图2),这样这张表就做好了。


3、第三步:编写VB代码。点击“工具”菜单——“宏”——“Visual Basic 编辑器”,在“Visual Basic 编辑器”中建立二个窗体为UserForm1, UserForm2, 添加控件并设置好属性(如图4、图5)。



4、第四步:双击工程列表中的Sheet1(商品单价)如图3,在弹出窗口中编写如下代吗:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Set My1 = Sheets("商品单价")

Set My2 = Sheets("销售单")

On Error GoTo mmmm

    If Selection.Font.ColorIndex = 15 Or My1.Cells(Target.Row, 8) <> "" Or Target.Row = 1 Or Target.Row = 2 Then ' 过滤已选过的数据行或行头

       Range("I" & Target.Row).Select

       Exit Sub

    End If

    If My1.Cells(Target.Row, 1) = "" Then Exit Sub ' 过滤空行

    For Q = 5 To 14

      If My2.Cells(Q, 11) = "" Then '找销售单内的空行

          My2.Cells(Q, 11) = My1.Cells(Target.Row, 1) '填写数据

          My2.Cells(Q, 12) = Target.Row

          My1.Range("A" & Target.Row & ":G" & Target.Row).Font.ColorIndex = 15 '在商品单价表中对已选过的行作标记

          My1.Cells(Target.Row, 8) = "√" '作标记也可用此代码My1.Range("I" & Target.Row).Value = "√"

          Exit For

      End If

    Next Q

    Range("I" & Target.Row).Select

    If Q >= 14 Then My2.Select    '填满10行跳转到销售单表

Exit Sub

mmmm:

   MsgBox "出错!"

End Sub

5、第五步:双击列表中的Sheet12(销售单),在弹出窗口中编写如下代吗:

'新增表单
  Private Sub CommandButton1_Click()

If MsgBox("确实要新增表单吗?", vbYesNo, "新增表单") = vbYes Then

    Set My1 = Sheets("商品单价")

    Set My2 = Sheets("销售单")

    For E = 5 To 14

        Sn = My2.Cells(E, 12)

        If Sn <> "" Then '检测数据是否已被清除

            My1.Range("A" & Sn & ":G" & Sn).Font.ColorIndex = 0   '清除商品单价表的某行标记

            My1.Range("H" & Sn).Value = ""                       '清除标记

        End If

    Next E

    My2.Copy after:=Sheets(1)    '复制表单

    ActiveSheet.Shapes.Range(Array("CommandButton3", "CommandButton1", "CommandButton2", "CommandButton4")).Select

    Selection.Delete '清除形状按钮

    My2.Select

    My2.Range("G5:G14,K5:L14").Value = "" '清除销售单表全部数据

    My2.Cells(1, 11) = My2.Cells(1, 11) + 1    '增加销售单编号

    Range("A1").Select

End If

End Sub

'清除内容

Private Sub CommandButton2_Click()

    X = Selection.Address '所选区域的单元格绝对地址

    For I = 1 To Len(X)

        If Mid(X, I, 1) = ":" Then A1 = A2:   A2 = ""

        If Val(Mid(X, I, 1)) > 0 Or Mid(X, I, 1) = "0" Then A2 = A2 & Mid(X, I, 1) '过滤字符只留数字

    Next I

    If A1 <= 4 Or A1 >= 15 Or A2 <= 4 Or A2 >= 15 Then

            MsgBox "你选择的区域不正确!" & Chr(13) & Chr(13) & "请正确选择清除区域!", 0, "提示"

    Else

            If MsgBox("你选择的区域为:第 " & A1 & " - " & A2 & " 行" & Chr(13) & Chr(13) & "确实要清除区域中的数据吗?", vbYesNo, "清除") = vbYes Then

                Set My1 = Sheets("商品单价")

                Set My2 = Sheets("销售单")

                For E = A1 To A2

                    Sn = My2.Cells(E, 12)

                    If Sn <> "" Then '检测数据是否已被清除

                        My1.Range("A" & Sn & ":G" & Sn).Font.ColorIndex = 0   '清除商品单价表的某行标记

                        My1.Range("H" & Sn).Value = ""                       '清除商品单价表的某行标记

                        My2.Range("G" & E & ",K" & E & ":L" & E).Value = "" '清除销售表的某行数据

                    End If

                Next E

            End If

            Range("A1").Select

    End If

End Sub

'表单设置

Private Sub CommandButton3_Click()

UserForm1.Show

End Sub

'使用说明

Private Sub CommandButton4_Click()

UserForm2.Show

End Sub

到这为止就全部做完了,最后注意要记得保存。使用者只要在“商品单价”表中双击鼠标,就会将数据自动填入到“销售单”表中,然后表格中输入数量即可,非常方便。