vb控制打印机自动打印表格.docx
《vb控制打印机自动打印表格.docx》由会员分享,可在线阅读,更多相关《vb控制打印机自动打印表格.docx(12页珍藏版)》请在冰豆网上搜索。
vb控制打印机自动打印表格
VB控制EXCLE自动打印表格
VB是常用的应用软件开发工具之一,由于VB的报表功能有限,而且一但报表格式发生变化,就得相应修改程序,给应用软件的维护工作带来极大的不便。
因此充分利用EXECL的强大报表功来实现报表功能。
但由于VB与EXCEL由于分别属于不同的应用系统,如何把它们有机地结合在一起,是一个值得我们研究的课题。
一、VB读写EXCEL表:
VB本身提自动化功能可以读写EXCEL表,其方法如下:
1、在工程中引用MicrosoftExcel类型库:
从"工程"菜单中选择"引用"栏;选择MicrosoftExcel9.0ObjectLibrary(EXCEL2003),然后选择"确定"。
表示在工程中要引用EXCEL类型库。
2、在通用对象的声明过程中定义EXCEL对象:
DimexcelAsObject
DimworkbookAsObject
DimsheetAsObject
3、在程序中操作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盘,放到别处须要改变程序。
。
然后在其中输入如下程序:
OptionExplicit
PublicuintAsInteger'单位名称
PublicgoodsAsInteger'设备名称
PublicnumberAsInteger'设备编号
PublicaddressAsInteger'出厂地址
PublicmodleAsInteger'设备型号
PublicreferenceAsInteger'参考
PublicresultAsInteger'检定结果
PublicdatesAsInteger'检定日期
PublicdeathAsInteger'检定日期
PubliccelAsInteger'打印张数
PublictimeAsInteger'打印时间
PrivateSubCommand1_Click()
Form2.Hide
Form1.Show
EndSub
PrivateSubCommand3_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"!
^-^参数修改成功^-^!
"
EndSub
PrivateSubForm_Initialize()'数据初始化
cel=1'打印张数
uint=1'单位名称
goods=2'设备名称
number=3'设备编号
address=4'出厂地址
modle=5'设备型号
reference=6'参考
result=7'检定结果
dates=8'检定日期
death=9'有效期至
time=2000'打印时间间隔
EndSub
PrivateSubCommand2_Click()
End
EndSub
建立一个FORM1,界面如下:
然后在其中输入如下程序:
DimexcelAsObject
DimworkbookAsObject
DimsheetAsObject
Dimpresent%
PrivateSubCommand1_Click()'打开EXCLE表格
IfDir("C:
\excel.bz")=""Then
Setexcel=CreateObject("excel.application")
Setworkbook=excel.Workbooks.Open("c:
\自动打印表格.xls")
Setsheet=workbook.WorkSheets
excel.Visible=True
workbook.Application.Run"auto_open"
excel.WorkSheets
(2).Activate'设置表2为活动表
IfForm2.uint<>0Thensheet
(2).Cells(1,2)=sheet
(1).Cells(Form2.cel,Form2.uint)'单位名称
IfForm2.goods<>0Thensheet
(2).Cells(2,2)=sheet
(1).Cells(Form2.cel,Form2.goods)'产品名称
IfForm2.number<>0Thensheet
(2).Cells(3,3)=sheet
(1).Cells(Form2.cel,Form2.number)'设备编号
IfForm2.address<>0Thensheet
(2).Cells(4,2)=sheet
(1).Cells(Form2.cel,Form2.address)'设备厂址
IfForm2.modle<>0Thensheet
(2).Cells(5,2)=sheet
(1).Cells(Form2.cel,Form2.modle)'设备型号
IfForm2.reference<>0Thensheet
(2).Cells(6,2)=sheet
(1).Cells(Form2.cel,Form2.reference)'分度号
IfForm2.result<>0Thensheet
(2).Cells(7,2)=sheet
(1).Cells(Form2.cel,Form2.result)'检定结果
IfForm2.dates<>0Thensheet
(2).Cells(11,2)=sheet
(1).Cells(Form2.cel,Form2.dates)'检定日期
IfForm2.death<>0Thensheet
(2).Cells(12,3)=sheet
(1).Cells(Form2.cel,Form2.death)'有效期至
Else
MsgBox"EXCL已打开!
"
EndIf
EndSub
PrivateSubCommand2_Click()'关闭退出表格
IfDir("C:
\excel.bz")<>""Then
workbook.Application.Run"auto_close"
Setexcel=Nothing
workbook.Close(True)
EndIf
Form1.Hide
Form2.Show
EndSub
PrivateSubCommand3_Click()'暂停打印
IfDir("C:
\excel.bz")=""Then
MsgBox"!
^-^请打开要打印的表格^-^!
"
Else
Timer1.Enabled=False
MsgBox"!
^-^打印暂停^-^!
"&Chr(10)&"!
^-^已打印"&Form2.cel-present-1&"张^-^!
"
EndIf
EndSub
PrivateSubCommand4_Click()'继续打印
IfDir("C:
\excel.bz")=""Then
MsgBox"!
^-^请打开要打印的表格^-^!
"
Else
Timer1.Interval=Form2.time
Timer1.Enabled=True
EndIf
EndSub
PrivateSubCommand5_Click()'开始打印
IfDir("C:
\excel.bz")=""Then
MsgBox"!
^-^请打开要打印的表格^-^!
"
Else
present=0
Form2.cel=1
Timer1.Interval=Form2.time
Timer1.Enabled=True
EndIf
EndSub
PrivateSubCommand6_Click()'下一张
IfDir("C:
\excel.bz")=""Then
MsgBox"!
^-^请打开要打印的表格^-^!
"
Else
present=present+1
IfForm2.uint<>0Thensheet
(2).Cells(1,2)=sheet
(1).Cells(present,Form2.uint)'单位名称
IfForm2.goods<>0Thensheet
(2).Cells(2,2)=sheet
(1).Cells(present,Form2.goods)'产品名称
IfForm2.number<>0Thensheet
(2).Cells(3,3)=sheet
(1).Cells(present,Form2.number)'设备编号
IfForm2.address<>0Thensheet
(2).Cells(4,2)=sheet
(1).Cells(present,Form2.address)'设备厂址
IfForm2.modle<>0Thensheet
(2).Cells(5,2)=sheet
(1).Cells(present,Form2.modle)'设备型号
IfForm2.reference<>0Thensheet
(2).Cells(6,2)=sheet
(1).Cells(present,Form2.reference)'分度号
IfForm2.result<>0Thensheet
(2).Cells(7,2)=sheet
(1).Cells(present,Form2.result)'检定结果
IfForm2.dates<>0Thensheet
(2).Cells(11,2)=sheet
(1).Cells(present,Form2.dates)'检定日期
IfForm2.death<>0Thensheet
(2).Cells(12,3)=sheet
(1).Cells(present,Form2.death)'有效期至
EndIf
EndSub
PrivateSubCommand7_Click()'上一张
IfDir("C:
\excel.bz")=""Then
MsgBox"!
^-^请打开要打印的表格^-^!
"
Else
present=present-1
Ifpresent<=0Thenpresent=1
IfForm2.uint<>0Thensheet
(2).Cells(1,2)=sheet
(1).Cells(present,Form2.uint)'单位名称
IfForm2.goods<>0Thensheet
(2).Cells(2,2)=sheet
(1).Cells(present,Form2.goods)'产品名称
IfForm2.number<>0Thensheet
(2).Cells(3,3)=sheet
(1).Cells(present,Form2.number)'设备编号
IfForm2.address<>0Thensheet
(2).Cells(4,2)=sheet
(1).Cells(present,Form2.address)'设备厂址
IfForm2.modle<>0Thensheet
(2).Cells(5,2)=sheet
(1).Cells(present,Form2.modle)'设备型号
IfForm2.reference<>0Thensheet
(2).Cells(6,2)=sheet
(1).Cells(present,Form2.reference)'分度号
IfForm2.result<>0Thensheet
(2).Cells(7,2)=sheet
(1).Cells(present,Form2.result)'检定结果
IfForm2.dates<>0Thensheet
(2).Cells(11,2)=sheet
(1).Cells(present,Form2.dates)'检定日期
IfForm2.death<>0Thensheet
(2).Cells(12,3)=sheet
(1).Cells(present,Form2.death)'有效期至
EndIf
EndSub
PrivateSubCommand8_Click()'从当钱页打印
IfDir("C:
\excel.bz")=""Then
MsgBox"!
^-^请打开要打印的表格^-^!
"
Else
Form2.cel=present
Timer1.Enabled=True
EndIf
EndSub
PrivateSubForm_Load()
present=0
Timer1.Interval=Form2.time
Timer1.Enabled=False
EndSub
PrivateSubTimer1_Timer()
Dima$
Timer1.Enabled=False
a=sheet
(1).Cells(Form2.cel,2)'如果单位名称为“”则打印结束
Ifa<>""Then
IfForm2.uint<>0Thensheet
(2).Cells(1,2)=sheet
(1).Cells(Form2.cel,Form2.uint)'单位名称
IfForm2.goods<>0Thensheet
(2).Cells(2,2)=sheet
(1).Cells(Form2.cel,Form2.goods)'产品名称
IfForm2.number<>0Thensheet
(2).Cells(3,3)=sheet
(1).Cells(Form2.cel,Form2.number)'设备编号
IfForm2.address<>0Thensheet
(2).Cells(4,2)=sheet
(1).Cells(Form2.cel,Form2.address)'设备厂址
IfForm2.modle<>0Thensheet
(2).Cells(5,2)=sheet
(1).Cells(Form2.cel,Form2.modle)'设备型号
IfForm2.reference<>0Thensheet
(2).Cells(6,2)=sheet
(1).Cells(Form2.cel,Form2.reference)'分度号
IfForm2.result<>0Thensheet
(2).Cells(7,2)=sheet
(1).Cells(Form2.cel,Form2.result)'检定结果
IfForm2.dates<>0Thensheet
(2).Cells(11,2)=sheet
(1).Cells(Form2.cel,Form2.dates)'检定日期
IfForm2.death<>0Thensheet
(2).Cells(12,3)=sheet
(1).Cells(Form2.cel,Form2.death)'有效期至
excel.ActiveSheet.PrintOut'打印输出
Form2.cel=Form2.cel+1
Timer1.Interval=Form2.time
Timer1.Enabled=True
Else
MsgBox"!
^-^表格已打完^-^!
"&Chr(10)&"!
^-^共打印"&Form2.cel-present-1&"张^-^!
"
EndIf
EndSub
4、运行VB程序,输入参数点击确定按钮可完成参数的修改,打印时间是控制每打一张表所须时间,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。
如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。
而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。
这样就实现了VB与EXCEL的无缝连接。
欢迎您的下载,资料仅供参考!