高分冷门英剧:在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)
在单元格G
在单元格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/通用格式")&"分整"
在单元格C
其余的输入就不用我介绍了。而后创建四个按钮,点击“视图”——“工具栏”——“控件工具箱”——“设计模式”——“命令按钮”创建完再点“退出命令按钮”。做一下打印页面设置,锁定该表(如图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
到这为止就全部做完了,最后注意要记得保存。使用者只要在“商品单价”表中双击鼠标,就会将数据自动填入到“销售单”表中,然后表格中输入数量即可,非常方便。