vb控制打印机自动打印表格Word文档格式.docx
《vb控制打印机自动打印表格Word文档格式.docx》由会员分享,可在线阅读,更多相关《vb控制打印机自动打印表格Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
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"
!
^-^参数修改成功^-^!
"
PrivateSubForm_Initialize()'
数据初始化
cel=1'
uint=1'
goods=2'
number=3'
address=4'
modle=5'
reference=6'
result=7'
dates=8'
death=9'
time=2000'
打印时间间隔
PrivateSubCommand2_Click()
End
建立一个FORM1,界面如下:
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
EXCL已打开!
EndIf
PrivateSubCommand2_Click()'
关闭退出表格
)<
"
auto_close"
Setexcel=Nothing
workbook.Close(True)
Form1.Hide
Form2.Show
PrivateSubCommand3_Click()'
暂停打印
^-^请打开要打印的表格^-^!
Timer1.Enabled=False
^-^打印暂停^-^!
&
Chr(10)&
^-^已打印"
Form2.cel-present-1&
张^-^!
PrivateSubCommand4_Click()'
继续打印
Timer1.Interval=Form2.time
Timer1.Enabled=True
PrivateSubCommand5_Click()'
开始打印
present=0
Form2.cel=1
PrivateSubCommand6_Click()'
下一张
present=present+1
0Thensheet
(2).Cells(1,2)=sheet
(1).Cells(present,Form2.uint)'
0Thensheet
(2).Cells(2,2)=sheet
(1).Cells(present,Form2.goods)'
0Thensheet
(2).Cells(3,3)=sheet
(1).Cells(present,Form2.number)'
0Thensheet
(2).Cells(4,2)=sheet
(1).Cells(present,Form2.address)'
0Thensheet
(2).Cells(5,2)=sheet
(1).Cells(present,Form2.modle)'
0Thensheet
(2).Cells(6,2)=sheet
(1).Cells(present,Form2.reference)'
0Thensheet
(2).Cells(7,2)=sheet
(1).Cells(present,Form2.result)'
0Thensheet
(2).Cells(11,2)=sheet
(1).Cells(present,Form2.dates)'
0Thensheet
(2).Cells(12,3)=sheet
(1).Cells(present,Form2.death)'
PrivateSubCommand7_Click()'
上一张
present=present-1
Ifpresent<
=0Thenpresent=1
PrivateSubCommand8_Click()'
从当钱页打印
Form2.cel=present
PrivateSubForm_Load()
PrivateSubTimer1_Timer()
Dima$
a=sheet
(1).Cells(Form2.cel,2)'
如果单位名称为“”则打印结束
Ifa<
excel.ActiveSheet.PrintOut'
打印输出
Form2.cel=Form2.cel+1
^-^表格已打完^-^!
^-^共打印"
4、运行VB程序,输入参数点击确定按钮可完成参数的修改,打印时间是控制每打一张表所须时间,打开EXCEL系统后,VB程序和EXCEL分别属两个不同的应用系统,均可同时进行操作,由于系统加了判断,因此在VB程序中重复点击EXCEL按钮时会提示EXCEL已打开。
如果在EXCEL中关闭EXCEL后再点EXCEL按钮,则会重新打开EXCEL。
而无论EXCEL打开与否,通过VB程序均可关闭EXCEL。
这样就实现了VB与EXCEL的无缝连接。