Excel中vba+自定义菜单
1、要求在excel中输入数据,点击打印按钮能将数据打印成指定格式的标签。原模板不能动,而且操作只要一步。原模板如下:
2、这是用户设置的表格,当天生产的品种,一个品种一张表格,每个品种会生成N多的批次,每一个批次一行记录。输入完成后,点击打印,将表中记录打印成如下图所示的标签:
3、难点:1、一天生成N多个品种,每一个品种N多行批,原表格样式为,一张表格一个品种,这一张表格一批一行。打印的效果则要,按每个品种每行打印。2、用户只要一键达成,在这一键中需要完成多个步骤。如,将要打印的记录填写模板,选择需要打印的模板区域,调用打印机打印选择中的区域,返回当前记录。
4、中间的想法过程略去,直接跳到设计思路。1、保持原来表格模板不动,根据打印出来的标签样式,在e垓矗梅吒xcel中设置标签模板。由于在同一张表格中设计,为了不葩溆氩棍影响原来excel表格的格式,我找了无数据的区域设置。设置的效果就如上图所示的样子。2、增加按钮,编写VBA代码(1)、得到当前选择行的标和列标。(2)、将选定要打印的行的数据填写到标签模板中。(3)、选择标签模板区域(4)、调用打印机打印选择区域(5)、返回到之前位置
5、代码如下:Sub按钮5_Click() '标签打印Dim h A衡痕贤伎s Integer, L As Integer, PrintNow_H As Integer 'H为所在行,L为所在列 h = Application.ActiveCell.Row L = Application.ActiveCell.Column 'Sheets("Sheet1").Range("Y6") = H 'Sheets("Sheet1").Range("Y7") = L Call ColumnLocate(h, PrintNow_H) ActiveSheet.Cells(388, 28) = ActiveSheet.Cells(PrintNow_H, 3) '品种ActiveSheet.Range("C3").Value ActiveSheet.Cells(389, 28) = ActiveSheet.Cells(h, 2) '批号Sheets("Sheet1").Range("AB38") ActiveSheet.Cells(389, 30) = ActiveSheet.Cells(h, 2) '规格 ActiveSheet.Cells(390, 28) = ActiveSheet.Cells(h, 8) '幅宽 ActiveSheet.Cells(390, 30) = ActiveSheet.Cells(h, 20) '结辨 ActiveSheet.Cells(391, 28) = ActiveSheet.Cells(h, 7) '段数 ActiveSheet.Cells(391, 30) = ActiveSheet.Cells(h, 25) '毛长 ActiveSheet.Cells(392, 28) = ActiveSheet.Cells(h, 6) '净长 ActiveSheet.Cells(392, 30) = ActiveSheet.Cells(h, 17) '疵点 ActiveSheet.Cells(393, 28) = ActiveSheet.Range("V33").Value '检验员ActiveSheet.Cells(33, 22) ActiveSheet.Cells(394, 28) = ActiveSheet.Range("W3").Value '检验日期 ActiveSheet.Range("AA385:AD394").Select 'Application.SendKeys ("^p") ActiveWindow.Selection.PrintOut 'Copies:=1, Collate:=True, IgnorePrintAreas:=False ActiveSheet.Cells(h, 1).Select '返回定位End Sub
6、将按钮添加到excel菜单栏
7、这样就能实现了,到这样的效果,对于我们来说已经好用了。可是用户觉得,菜单放在上面还是觉得麻烦,他想把打印功能放到每一行去,一行一个“打印”,这样的想法对我们来说肯定是不合理的,一行一个打印按钮,那肯定是重复的,而且是没有必要的。想了想,用了一个间接的方法来满意用户的需求。用鼠标选择功能来判断,如果选择了“标签打印”则调整之前做好的那个命令按钮的功能。
8、代码如下:Private Sub Worksheet_Selection觊皱筠桡Change(ByVal Target As Range)'MsgBox (Target.Value)If Target.Text = "" ThenElseIf Target.Text = "标签打印" ThenCall按钮5_ClickElseIf Target.Text = "整单打印" ThenCall按钮4_ClickEnd IfEnd Sub
9、这样一来就跟用户想要的效果是一样的了。最终实现的效果,用户鼠标在哪一行就打印哪一行,而且不会出现打印预览和选择打印机的窗口,一点打印直接就能打出想要的效果。这些功能全部用命令依次执行了。