孙 瑜,罗孝骞
(黑龙江工业学院,黑龙江 鸡西 158100)
票据打印是应用软件开发中一项比较费时的工作,而且对于精确打印(银行支票、进帐单等)设置比较繁琐,利用报表控件(如Data Report,水晶报表等)实现精确打印又需要经过一段时间的学习,上手慢,效果也不理想。那么,有没有简单有效而又灵活的方法实现上述功能呢?笔者在实践中经过VB调用access和excel实现精确打印支票、进帐单等,该方法易学好用,而且功能强大。下面笔者结合票据打印中经常困扰财务工作人员的问题,谈谈如何巧用VB调用access和excel实现票据精确打印。
1.如何在固定大小的单元格内实现自动换行及字体大小的自动切换。
2.如何在固定单元格内实现字间距的控制(支票等在小写数字打印过程中用到)。
3.如何在数字前加入¥字符。
4.如何对打印过的数据实现自动记忆,自动更新,自动引用。
5.如何对页面进行后期控制。
1. 如何在固定大小的单元格内实现自动换行及字体大小的自动切换。
VB调用excel的好处是我们对格式设置都可以在excel中进行(excel这些年比较普及,大多数人用得比较熟练),VB程序只是给excel附值,对于第一个问题我们举例说明。
当我们要在一个固定大小的单元格内输入1—30个汉字时(比如银行开户名一般不会超过30个汉字),字号为10号,1-7个汉字为一行(单元格可容下二行10号字),我们把单元格直接在excel里设置成自动换行,1-14个汉字时这个单元格就满了(二行),再超过这个字数时怎么办(自动换行和缩小字体在excel里不能同时应用)?这里我们用一下excel的宏,让汉字数在超过14个汉字时自动缩小为8号,这样就可以使所输字符全部可见。具体操作如下:
If (Len(Sheet1.Cells(2, 4)) <= 20) Then
Sheet1.Cells(2, 4).Font.Size = 10
Else
Sheet1.Cells(2, 4).Font.Size =8
End If
注释:LEN 返回文本串的字符数,Font.size字号控制。
这里我们简单介绍一下excel的宏,Excel的宏是由一系列的Visual Basic语言代码构成的,因此,如果用户熟悉Visual Basic 语言,可以用它编写为宏,如果用户不熟悉VB语言,可以用记录功能建立宏。下面介绍一下有关的方法和技巧。
建立宏的方法有两种:一是用宏记录器记录所要执行的一系列操作;二是用Visual Basic语言编写。这两种方法各有优越之处,自动记录宏可以使用户在不懂Visual Basic 语言的情况下也可建立自己的宏,但缺点是对于一些复杂的宏要记录的操作很多,而且可能有些功能并非是能通过现有的操作所能完成的;自己动手编写宏则不必进行繁琐的操作而且能实现自动记录所不能完成的一些功能。在这里需要说明的一点是,即使自动记录的宏,记录器也是把它翻译成Visual Basic语言来存放的,因此,在这里的一点技巧是你可以使用自动记录功能记录宏,记录完毕后再打开宏进行编辑、修改简化或增强宏的功能,这样可省去许多输入代码的工作。
2.如何在固定单元格内实现字间距的控制。
对字间距的控制主要用在支票、进帐单等数字部份的控制。这里用到二个函数(都在是excel单元格内使用),CONCATENATE (text1,text2,...) 连接函数,MID(text,start_num,num_chars)从字符串中读取数据。用法如下:
=CONCATENATE(" ",MID(G16,1,1)," ",MID(G16,2,1)," ",MID(G16,3,1)," ",MID(G16,4,1)," ",MID(G16,5,1)," ",MID(G16,6,1)," ",MID(G16,7,1)," ",MID(G16,8,1)," ",MID(G16,9,1)," ",MID(G16,10,1)," ")&" "。
因为会计数字,一般不会超过10位数字。其中做下说明,这里我们是利用空格来控制间距大小,而空格的大小是根据字号判断的。注意一点,我们从VB附值时,不要把值附到有公式的单元格内,这样会替换掉公式,我们要利用一个过渡单元格,上例G16就是一个过渡单元格,调试好后将G16的字体颜色设成透明就可以了。
3. 如何在数字前加入¥字符。
如何在所生成的数据前加上¥符号,我们可以在单元格中设置如下公式:
=IF(G13="","",IF(G13<10000000000,"¥",)&WIDECHAR(ROUND(G13,2)))
其中用到二个函数,widechar函数,其功能是将单字节转换成为双字节;round,返回某个数字按指定位数取整后的数字。用这二个函数进行处理的数据打印出来后,¥符号就加到你要打印的数值前方了。同样G13也是个辅助单元格。
4. 如何对打印过的数据实现自动记忆,自动更新,自动引用。
自动记忆、自动更新、自动引用主要是针对支票、进帐单、邮政单据、物流单据而言。我们可以使用VB加access数据库操作。这里笔者主要讲一下流程、思路及所用到的SQL语言。
(1)自动记忆。先在access建立个表,利用SQL语言,即INSERT INTO 表名称 VALUES (值1, 值2,....)语句,将我们要记忆的数据加入到表里,这样就完成了记忆功能。
(2)自动更新。由于一个单位的名子不会变,开户行、帐号和其它一些信息是要变化的,所以我们要用到更新。首先要利用SQL语言的条件查询语句(SELECT 列名称 FROM 表名称 WHERE 列 运算符 值)对表进行查询,如果没有查到,说明以前没有输入过,那么直接进入自动记忆环节,将数据插入到表中;如果有,则利用SQL语言(更新语句UPDATE 表名称 SET 列名称=新值 WHERE 列名称=某值)进行更新处理(对于表中有的数据不管变动没变动,都要进行更新,由于程序量不大,不会影响运算速度)。
(3)自动引用。利用SQL的模糊查询(SELECT字段FROM表WHERE某字段Like条件),通过输入用户名一步一步地精确并在下拉框中显示,哪个是你想要的用户双击即可,同时引出该用户名的开户行、帐号,这里如果没有该用户,手动加入开户行、帐号等信息回到第一步,如果有该用户,则看开户行、帐号是否变化,如变化,则手工改动,回到第二步,如无变化无需改动也回到第二步。
5. 如何对页面进行后期控制。
当我们把格式设置好后,需要注意里面的一些技巧,对以后票据的变动(比如进帐单格式变动)我们可以快速修改。
(1)在制作模板时,A列和1行一定要空出来,这样以后可以用拉A列或1行进行上下右左的调整(不用去excel的页面设置里一点一点调整)。
(2)辅助单元格和辅助列的应用,上面已经说明。
我们为什么要用VB来控制excel呢?我们可以结合VB和excel的优点来对整个模版进行控制(用其它语言效果是一样的),excel认知度高,大家可以自已对模版进行修改(对不会开发程序的人而言),友好性强,VB是一种非常易学的开发软件,我们可以利用VB和access对打印做记录、查询等功能。VB语言还可以来编辑excel的宏,如果会用VB语言,那么,对excel的宏设计更是方便。
[1]段兴.Visual Basic6.0数据库实用程序设计100例[M].人民邮电出版社,2003.
[2]周庆麟,等. Excel 应用大全[M].人民邮电出版社,2008.