您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > vb控制打印机自动打印表格
VB控制EXCLE自动打印表格VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。因此充分利用EXECL的强大报表功来实现报表功能。但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。一、VB读写EXCEL表:VB本身提自动化功能可以读写EXCEL表,其方法如下:1、在工程中引用MicrosoftExcel类型库:从工程菜单中选择引用栏;选择MicrosoftExcel9.0ObjectLibrary(EXCEL2003),然后选择确定。表示在工程中要引用EXCEL类型库。2、在通用对象的声明过程中定义EXCEL对象:DimexcelAsObjectDimworkbookAsObjectDimsheetAsObject3、在程序中操作EXCEL表常用命令:SetxlApp=CreateObject(Excel.Application)'创建EXCEL对象SetxlBook=xlApp.Workbooks.Open(文件名)'打开已经存在的EXCEL工件簿文件xlApp.Visible=True'设置EXCEL对象可见(或不可见)SetxlSheet=xlBook.Worksheets(表名)'设置活动工作表xlSheet.Cells(row,col)=值'给单元格(row,col)赋值xlSheet.PrintOut'打印工作表xlBook.Close(True)'关闭工作簿xlApp.Quit'结束EXCEL对象SetxlApp=Nothing'释放xlApp对象xlBook.RunAutoMacros(xlAutoOpen)'运行EXCEL启动宏xlBook.RunAutoMacros(xlAutoClose)'运行EXCEL关闭宏4、在运用以上VB命令操作EXCEL表时,除非设置EXCEL对象不可见,否则VB程序可继续执行其它操作,也能够关闭EXCEL,同时也可对EXCEL进行操作。但在EXCEL操作过程中关闭EXCEL对象时,VB程序无法知道,如果此时使用EXCEL对象,则VB程序会产生自动化错误。形成VB程序无法完全控制EXCEL的状况,使得VB与EXCEL脱节。二、EXCEL的宏功能:EXCEL提供一个VisualBasic编辑器,打开VisualBasic编辑器,其中有一工程属性窗口,点击右键菜单的插入模块,则增加一个模块1,在此模块中可以运用VisualBasic语言编写函数和过程并称之为宏。其中,EXCEL有两个自动宏:一个是启动宏(SubAuto_Open()),另一个是关闭宏(SubAuto_Close())。它们的特性是:当用EXCEL打含有启动宏的工簿时,就会自动运行启动宏,同理,当关闭含有关闭宏的工作簿时就会自动运行关闭宏。但是通过VB的自动化功能来调用EXCEL工作表时,启动宏和关闭宏不会自动运行,而需要在VB中通过命令xlBook.RunAutoMacros(xlAutoOpen)和xlBook.RunAutoMacros(xlAutoClose)来运行启动宏和关闭宏。三、VB与EXCEL的相互勾通:充分利用EXCEL的启动宏和关闭宏,可以实现VB与EXCEL的相互勾通,其方法如下:在EXCEL的启动宏中加入一段程序,其功能是在磁盘中写入一个标志文件,同时在关闭宏中加入一段删除此标志文件的程序。VB程序在执行时通过判断此标志文件存在与否来判断EXCEL是否打开,如果此标志文件存在,表明EXCEL对象正在运行,应该禁止其它程序的运行。如果此标志文件不存在,表明EXCEL对象已被用户关闭,此时如果要使用EXCEL对象运行,必须重新创建EXCEL对象。四、VB控制EXCLE自动打印表格:1、在VB中,建立一个FORM2,界面如下:其中要求输入的参数是原表格的纵列,即A列对应1、B列对应2、A列对应1、C列对应3、D列对应4、E列对应5,依此类推,打印时间是控制每打一张表所须时间,单位为毫秒(ms)。当把值设为0时,对应单元格的内容不变,以便灵活应用,须把要打印的表放到C盘,放到别处须要改变程序。。然后在其中输入如下程序:OptionExplicitPublicuintAsInteger'单位名称PublicgoodsAsInteger'设备名称PublicnumberAsInteger'设备编号PublicaddressAsInteger'出厂地址PublicmodleAsInteger'设备型号PublicreferenceAsInteger'参考PublicresultAsInteger'检定结果PublicdatesAsInteger'检定日期PublicdeathAsInteger'检定日期PubliccelAsInteger'打印张数PublictimeAsInteger'打印时间PrivateSubCommand1_Click()Form2.HideForm1.ShowEndSubPrivateSubCommand3_Click()uint=Val(Text1.Text)'单位名称goods=Val(Text2.Text)'设备名称modle=Val(Text3.Text)'设备型号address=Val(Text4.Text)'出厂地址number=Val(Text5.Text)'设备编号reference=Val(Text6.Text)'参考result=Val(Text7.Text)'检定结果dates=Val(Text8.Text)'检定日期time=Val(Text9.Text)'打印时间death=Val(Text10.Text)'有效期至MsgBox!^-^参数修改成功^-^!EndSubPrivateSubForm_Initialize()'数据初始化cel=1'打印张数uint=1'单位名称goods=2'设备名称number=3'设备编号address=4'出厂地址modle=5'设备型号reference=6'参考result=7'检定结果dates=8'检定日期death=9'有效期至time=2000'打印时间间隔EndSubPrivateSubCommand2_Click()EndEndSub建立一个FORM1,界面如下:然后在其中输入如下程序:DimexcelAsObjectDimworkbookAsObjectDimsheetAsObjectDimpresent%PrivateSubCommand1_Click()'打开EXCLE表格IfDir(C:\excel.bz)=ThenSetexcel=CreateObject(excel.application)Setworkbook=excel.Workbooks.Open(c:\自动打印表格.xls)Setsheet=workbook.WorkSheetsexcel.Visible=Trueworkbook.Application.Runauto_openexcel.WorkSheets(2).Activate'设置表2为活动表IfForm2.uint0Thensheet(2).Cells(1,2)=sheet(1).Cells(Form2.cel,Form2.uint)'单位名称IfForm2.goods0Thensheet(2).Cells(2,2)=sheet(1).Cells(Form2.cel,Form2.goods)'产品名称IfForm2.number0Thensheet(2).Cells(3,3)=sheet(1).Cells(Form2.cel,Form2.number)'设备编号IfForm2.address0Thensheet(2).Cells(4,2)=sheet(1).Cells(Form2.cel,Form2.address)'设备厂址IfForm2.modle0Thensheet(2).Cells(5,2)=sheet(1).Cells(Form2.cel,Form2.modle)'设备型号IfForm2.reference0Thensheet(2).Cells(6,2)=sheet(1).Cells(Form2.cel,Form2.reference)'分度号IfForm2.result0Thensheet(2).Cells(7,2)=sheet(1).Cells(Form2.cel,Form2.result)'检定结果IfForm2.dates0Thensheet(2).Cells(11,2)=sheet(1).Cells(Form2.cel,Form2.dates)'检定日期IfForm2.death0Thensheet(2).Cells(12,3)=sheet(1).Cells(Form2.cel,Form2.death)'有效期至ElseMsgBoxEXCL已打开!EndIfEndSubPrivateSubCommand2_Click()'关闭退出表格IfDir(C:\excel.bz)Thenworkbook.Application.Runauto_closeSetexcel=Nothingworkbook.Close(True)EndIfForm1.HideForm2.ShowEndSubPrivateSubCommand3_Click()'暂停打印IfDir(C:\excel.bz)=ThenMsgBox!^-^请打开要打印的表格^-^!ElseTimer1.Enabled=FalseMsgBox!^-^打印暂停^-^!&Chr(10)&!^-^已打印&Form2.cel-present-1&张^-^!EndIfEndSubPrivateSubCommand4_Click()'继续打印IfDir(C:\excel.bz)=ThenMsgBox!^-^请打开要打印的表格^-^!ElseTimer1.Interval=Form2.timeTimer1.Enabled=TrueEndIfEndSubPrivateSubCommand5_Click()'开始打印IfDir(C:\excel.bz)=ThenMsgBox!^-^请打开要打印的表格^-^!Elsepresent=0Form2.cel=1Timer1.Interval=Form2.timeTimer1.Enabled=TrueEndIfEndSubPrivateSubCommand6_Click()'下一张IfDir(C:\excel.bz)=ThenMsgBox!^-^请打开要打印的表格^-^!Elsepresent=present+1IfForm2.uint0Thensheet(2).Cells(1,2)=sheet(1).Cells(present,Form2.uint)'单位名称IfForm2.goods0Thensheet(2).Cells(2,2)=sheet(1).Cells(present,Form2.goods)'产品名称IfForm2.number0Thensheet(2).Cells(3,3)=sheet(1).Cells(present,Form2.number)'设备编号IfForm2.address0Thensheet(2).Cells(4,2)=sheet(1).Cells(present,Form2.address)'设备厂址IfForm2.modle0Thensheet(2).Cells(5,2)=sheet(1).Cells(present,Form2.modle)'设备型号IfForm2.reference0Thensheet(2).Cells(6,2)=sheet(1).Cells(present,Form2.reference)'分度号IfForm2.r
本文标题:vb控制打印机自动打印表格
链接地址:https://www.777doc.com/doc-4519542 .html