Excel行记录转换为页报表的方法

来源:转载

这次人事部门调资,要我帮忙设计“调资审批表”,将预先录入好的Excel行员调资数据(一人占一行),转换成每人一页,打印出来。我运用Excel本身的“宏”功能,完成了这种转换,解决了“行记录转换为页报表”这个问题。方法如下:

(一)录入好原始数据资料。如“行员调资数据”,一行代表一个人的调资档案资料。

(二)在同一工作薄内新建一个工作表。重命名为“报表页”,设定并调整需打印输出的报表格式,如:“姓名”项目名放在A4,它的动态数据(每人不同)定位在B4,“性别”项目名放在C4,它的动态数据定位在D4。并将某合适位置作为行序号输入框,如A1填提示“行序号”,B1用来输原始表“行员调资数据”的对应行序号。

(三)建立操作按钮。进入菜单-视图-工具栏-Visual Basic,出现VB设计模式(按下[设计模式]按钮),按[控件工具箱]按钮,出现控件图列小窗口,单击[命令按钮],在报表页合适位置单击,可见按钮方块,拉至所需大小。因打印时会同时打印出该按钮,为不影响报表效果,可右击该按钮,在弹出的快捷菜单中选择“设置控件格式→属性”,取消勾选“打印对象”。右击按钮选属性,将Caption属性改为“转换”。

(四)建立“宏”(输入VBA程序)。双击“转换”按钮,出现程序设计画面,插入如下语句:

Private Sub CommandButton1_Click()

XLS0 = "行员调资数据"

XLS1 = "报表页"

Sheets(XLS1).Select

x = Cells(1, 2)

Cells(4, 2) = Sheets(XLS0).Cells(x, 1)

Cells(4, 4) = Sheets(XLS0).Cells(x, 2)

Cells(4, 6) = Sheets(XLS0).Cells(x, 3)

Cells(4, 8) = Sheets(XLS0).Cells(x, 4)

Cells(6, 2) = Sheets(XLS0).Cells(x, 5)

Cells(6, 4) = Sheets(XLS0).Cells(x, 6)

Cells(6, 6) = Sheets(XLS0).Cells(x, 7)

Cells(6, 8) = Sheets(XLS0).Cells(x, 8)

ActiveWindow.FreezePanes = True

Range("B1").Select

End Sub

说明:其中x = Cells(1, 2)表示第一行第二列B1位置用来输入原始表XLS0(“行员调资数据”)的对应行序号;Cells(4, 2) = Sheets(XLS0).Cells(x, 1)表示“报表页”第四行第二列B4的数据自动引用XLS0(“行员调资数据”)的第x行第一列的数据,其余以此类推,把原始表一行的所需项目逐一对应到“报表页”中来。

按“文件-保存”,回到“报表页”,退出设计模式(按[设计模式]按钮使其凸起),关闭有关设计模式的窗口。至此全部准备工作已完成。

如果要转换成“工资条”的形式,则需将上面语句改为:

Private Sub CommandButton1_Click()

XLS0 = "行员调资数据"

XLS1 = "工资条"

Sheets(XLS1).Select

x = 2

Do While Not (IsEmpty(Sheets(XLS0).Cells(x, 1)))

y = 1

Do While Not (IsEmpty(Sheets(XLS0).Cells(1, y)))

x1 = (x - 1) * 3 + 1

Cells(x1, y) = Sheets(XLS0).Cells(1, y)

Cells(x1 + 1, y) = Sheets(XLS0).Cells(x, y)

Cells(x1 + 2, y) = "-"

y = y + 1

Loop

x = x + 1

Loop

ActiveWindow.FreezePanes = True

Range("B1").Select

End Sub

(五)转换。在“报表页”B2位置输入原始表对应的行序号,回车,单击[转换]按钮,即可自动将原始表的指定行数据对应转换到“报表页”中来,打印即可。

注意:若调整了“报表页”的动态数据行列位置,必须在VBA程序中作相应语句的修改。程序不会自动更新。

本文只是告诉了我们一种转换的思路、方法,在很多场合可举一反三,变通使用。可能同事们已有更好的方法,望能交流指导。

分享给朋友:
您可能感兴趣的文章:
随机阅读: