利用Excel 97打印工资条
但在使用Excel97的过程中,可能会有一个问题一直困扰着会计人员,这就是:用Excel97打印的工资条只有第一个人有工资条的条头(如:编号、姓名、工资、津贴……)(见^02050202a^1),而我们的要求是每个人都要有工资条的条头(见^02050202b^2)(因为工资条是要裁开发给每个人的)。
当然,有些人可能认为这个问题很容易解决,即只要在每个人的前头插入工资条的条头不就好了嘛!但实际是:若单位里有100多个人的话,你就要复制100多次,这显然就不能体现计算机的长处。更要命的是:前面的操作每个月都要如此反复。某些人可能会提议,那就把前面的设置另存为模板吧。当然,这也不失为一种方法,但君不见,这样一来,每个人的工资数在表格中就让工资条的条头给隔开了,以至于不能利用Excel97的填充柄来复制数据、公式(可知道这正是Excel97备受青睐的重要因素之一!),也就是说,你同样要复制数据、公式上百次。
解决思路:通过一段时间的摸索,我把问题归结为:在表1的表格(称之为源表格)中输入、处理工资数,然后以表2的表格(称之为目标表格)的形式打印,即现在的核心问题是把表1的表格转换为表2的表格,而这可以用嵌入Excel97中的VBA语言来编程实现。
程序清单:假设如表1的表格在工作簿中的sheet1工作表(为活动工作表)中,而如表2的表格要在工作簿中的sheet2工作表中,则程序清单如下:
Option Base1
Dim aa(13)As Range,xm As Range ′xm准备存放条头的项目
Dim List_1 As Integer ′源表格中的行定位变量
Dim List_2 As Integer ′目标表格中的行定位变量
Dim List_str As String ′源表格中的行定位变量,字符型
Sub mymain()
List_1=2 ′从源表格的第二行开始
List_2=2
Do
List_str=RTrimS(LTrimS(StrS(List_1)))
Set aa(1)=ActiveSheet,Range(″A″&List_str) ′读编号
Set aa(2)=ActiveSheet,Range(″B″&List_str) ′读月份
If aa(1)=aa(2) Then Exit Do ′编号、月份均空白时不再读
transform List_2
List_1=list_1+1
List_2=List_2+2
Loop
End Sub
Sub transform(num As Integer)
Dim n As Integer
Dim v As String ′源表格的列定位变量
Dim nl As Variant′目标表格的列定位变量
Dim w As Variant ′目标表格的行定位变量
n1=num
w=n1+1
For n=1 To 11 Step 1 ′准备传送工资条的条头及工资数
With Worksheets(″sheet2″)
v=Chr(64+n) ′源表格的数据从A列开始
Set xm=ActiveSheet.Range(v&″1″)
Range(Chr(n+64)&n1)=xm ′传送工资条的条头
Set aa(n+2)=ActiveSheet.Range(v&List1_str)
Range(Chr(n+64)&w)=aa(n+2) ′传送工资条的工资数
End With
Next
End Sub