VBA编程实现工商银行批量转账工具软件
2013-12-29梁浩武华
摘要:工商银行为个人客户提供批量转账服务,个人客户可以通过工行网上银行进行批量转账,免手续费。该文介绍了通过VBA编程制作工商银行批量转账工具软件的原理,使其能够导入并处理EXCLE文件,自动生成用于批量转账网银上传文件。
关键词:VBA;EXCEL;批量转账;网上银行
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2013)12-2804-03
1 工行批量转账业务
企事业单位日常财务发放款项,经常需要同时向大批量账户转账汇款。常见的做法可以有三种方式:1)银行营业厅填写转账汇款单据。2)银行提供存盘业务。3)银行为企业财务提供代发工资软件。对于第一种转账方式,需在汇款单据上手写账户名、姓名、金额等详细信息,繁琐耗时,容易出错。对于第二种方式,需向银行提供EXCEL汇款表格,每笔转账收取相应手续费。对于第三种方式,无法针对个人用户使用。
2 批量转账工具及其局限
工商银行针对个人客户提供网上银行批量转账业务,对于本地同行间的批量转账汇款业务免收手续费,对于需要频繁进行转账业务的个人来说将会节省大量资金。工行网上银行提供下载批量转账客户端软件(图 1),用来制作批量转账上传文件,软件在使用中需要手动输入金额、付款账号、收款账号、收款账号名称,没有导入处理EXCEL文件的功能。如果汇款账户很多,此时录入操作将会非常繁琐。
转账业务的处理流程通常是汇款人保存一份“姓名、工行卡号”格式的账号EXCEL表格,如果有业务往来,自制或他人提供一份“姓名、金额”格式的用于描述汇款明细的汇款额EXCEL表格。这两份表格可以通过EXCEL提供的VLOOKUP函数连接成一份格式为“姓名、工行卡号、金额”的EXCEL文件。此时如果能将这个文件直接转换为工行可识别的上传文件,批量转账将非常简单,因为前期保存有一份常有业务往来人员的账号EXCEL表格,再次转账时,无需重复录入账号信息。该文将介绍如何将这个格式为“姓名、工行卡号、金额”的EXCEL文件自动转换成工行网银可识别的批量转账上传文件。
3 批量转账上传文件格式
工行提供的批量转账工具需录入每一笔转账的“金额、付款账号、收款账号、收款账号名称”,录入完毕保存后得到后缀为“.gbpt”的网银上传文件。使用UltraEdit软件将其打开(图 2),发现网银上传文件为明文文本文件,格式如下:
#总计信息
|币种|日期|总计标志|总金额|总笔数|
#明细指令信息
|币种|日期|顺序号|付款帐号|付款账号类型|收款帐号|收款帐号名称|金额|用途|备注信息|是否允许收款人查看付款人信息|手机号码|短信留言|
#指令结束标志
经测试发现,上传文件的格式中,只需对应填写“||||付款帐号||收款帐号|收款帐号名称|金额|||||”,将文件后缀名改为“.gbpt”,使用工行批量客户端软件打开后另存为新文件,在新文件中其他字段将会自动生成。下面将要介绍如何使用VBA编程将格式为“姓名、工行卡号、金额”的EXCEL文件转换成工行网银批量转账上传文件。
4 VBA简介
Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic Script。VBA 提供了面向对象的程序设计方法,提供了相当完整的程序设计语言。VBA 易于学习掌握,可以使用宏记录器记录用户的各种操作并将其转换为VBA 程序代码。这样用户可以容易地将日常工作转换为VBA 程序代码,使工作自动化。对于本文的应用来说,使用VBA编程,可以方便的控制EXCEL文件的行、列、单元格等。
5 VBA编程实现
'提供输入的EXCEL文件应遵循格式:卡号 姓名 金额
Sub excel_to_txt()
Dim n As Long
init
get_parts_total
‘对每一个输出文件分别处理
For n = 0 To parts_total
handle n
Next
write_log "Total ", log_total_lines, log_total_amounts
End Sub
Sub init()
'设置付款账号卡号
card_src = "6222021602012345678"
'设置一个结果文件的最大汇款笔数,工行批量汇款一次提交最多50笔汇款
split_num = 50
'设置文件保存路径
dir = "C:\Documents and Settings\Administrator\桌面\"
log_total_amounts = 0
log_total_lines = 0
End Sub
Sub handle(part_num As Long)
Dim log_part_amounts As Long
Dim log_part_lines As Long
Dim filename As String
filename = part_num & ".gbpt"
file = dir & filename
Open file For Output As #1
scan_row = part_num * split_num + 1
end_row = scan_row + split_num
'输出第一行
Print #1, "RMB|20120304|1|78900|6|"
log_part_amounts = 0
log_part_lines = 0
‘处理每一行
Do While scan_row < end_row And (Not IsEmpty(Sheet1.Cells(scan_row, 1)))
With Sheet1
card_des = .Cells(scan_row, 1)
name = .Cells(scan_row, 2)
income = .Cells(scan_row, 3)
income_int = .Cells(scan_row, 3)
income = income & "00"
End With
log_part_amounts = log_part_amounts + income_int
str = "RMB|||" & card_src & "||" & card_des & "|" & name & "|" & income & "|||0||"
‘输出到结果文件
Print #1, str
scan_row = scan_row + 1
Loop
log_part_lines = scan_row - part_num * split_num - 1
log_total_lines = log_total_lines + log_part_lines
log_total_amounts = log_total_amounts + log_part_amounts
write_log filename & " ", log_part_lines, log_part_amounts
Print #1, "*"
Close #1
End Sub
‘获得批量上传文件的个数
Sub get_parts_total()
scan_row = 1
Do While Not IsEmpty(Sheet1.Cells(scan_row, 1))
scan_row = scan_row + 1
Loop
lines_total = scan_row - 1
parts_total = lines_total / split_num
End Sub
6 总结
本文介绍使用VBA编程制作工商银行网银批量转账工具软件,使得EXCEL汇款明细文件自动生成网银批量转账(免手续费)上传文件,从而在上传文件制作过程中完全不用手工输入操作,大幅度提高工作效率和准确性。
参考文献:
[1] 沃肯巴赫.中文版Excel 2010高级VBA编程宝典[M].北京:清华大学出版社,2012.
[2] 李政. VBA应用案例教程[M].北京:国防工业出版社,2012.
[3] Davis. VBA从入门到精通[M].2版.北京:电子工业出版社,2008.
[4] 傅靖. Excel 2007 VBA开发技术大全[M].北京:电子工业出版社,2008.