论文部分内容阅读
(中国劳动关系学院经济管理系,北京100037)
[摘 要] 在财务工作中,利用Excel函数多重嵌套方法可以进行账务处理,但自动化程度低,数据保密性差。本文给出了一个在Excel平台下利用VBA技术编制的通用自动化登账程序。
[关键词] Excel VBA;财务;自动登账
[中图分类号]F232[文献标识码]A[文章编号]1673-0194(2008)22-0007-04
1 系统目标
系统的目标决定于会计管理的要求,并受会计人员和计算机人员的素质以及硬件和软件计算机资源的制约,还受其他经济业务系统的影响。
一般来说,账务自动登账系统的目标,可以表述为以记账凭证为原始数据,按照设计的账户体系和系统指标体系,完成全部的分类核算。其具体要求是:能输入系统核算所需资料,主要指利用各种记账凭证进行数据输入;能根据数据资料进行分类核算,随机输出总分类账;能随机输出某个时期任意分类核算的详细信息,即能随机输出任意会计科目的明细账;能够根据需要随机输出会计报表,包括对外报表和其他内部管理需要的报表资料。
本文中把企业能根据需要随机输出各科目的明细账和总账作为程序设计目标。
2 系统文件设计
为了保存数据以及输出账簿及其他内部管理所用会计信息,同时为了系统扩展的需要,本系统需要在Excel中建立各种表格文件,具体情况如下:
2. 1科目代码表(kmdmb)
该表主要存储企业科目代码信息,通常情况下包括科目代码、科目名称、是否明细、科目类型、科目级别。文件结构及示例如表1所示。
2. 3账簿表
该文件用于保存总账和明细账输出的内容格式。文件为临时文件,建账时只需要建立表的结构。另外,在采用计算机进行会计核算时,不单独设置现金和银行存款日记账,而是将这两个科目的核算与其他科目采用同样的方法处理,当需要输出现金或银行存款日记账时,可以利用该账文件结构。该文件结构及示例如表5所示。
2. 4科目发生额及余额表
该文件用于存储企业全部会计科目的发生额和余额等数据,由各月数据的会计凭证数据按照科目逐级汇总形成。具体结构及示例如表3所示。
3 登账程序设计
3. 1登账数据处理过程
登账实际上是根据会计科目反映的经济业务发生的时间顺序逐日逐笔进行分类汇总,采用计算机核算以后,由于系统已经建立了明细账文件的数据结构,当用户需要输出某科目的明细账时,可以通过在凭证号文件和凭证内容文件中选择该科目的发生业务进行输出即可。
如某科目某会计期间所需数据基本处理过程如下:①打开期初余额表,查找用户选定科目的记录,取期初数并添加到要输出的科目的明细账中,并填写摘要;②扫描凭证号文件,如果文件中有科目为用户选定科目的记录,则取当前凭证号、摘要、借方金额、贷方金额等信息并保存到变量中,并计算当前科目的借方发生额合计数、贷方发生额合计数和余额;③根据会计科目的性质,确定借贷方向,然后将凭证号文件中的凭证号、摘要以及该科目的借方发生额、贷方发生额、余额添加到明细账文件中;④选择凭证号文件并下移指针,然后返回到第②步进行处理;⑤将借方合计数、贷方合计数写入到明细账最后一行。根据需要,将该明细账显示或打印即可。
3. 2登账程序设计
根据以上描述,本案设计一个名为zzdz的自动登账函数,该函数将接受用户在列表框中选定的科目编码、科目名称、科目类型、科目级别等4个参数,并根据会计核算的要求将用户选定科目的业务信息登记到账簿中。利用该函数,可以进行总账和明细账的登记,该函数接受参数后运行效果如表5所示。
该函数代码如下:
Public Function zzdz(dblcurkmdm As Double, strcurkmmc As String, intkmlx, intkmjb)
Dim mycounter As Integer’计数器
Dim dblpzcount As Double, kmdm As Double ’
Dim rq As Date, pzh As Integer, zy As String ’日期,凭证号,摘要
Dim month1 As Integer, month2 As Integer’月份
Dim jfje As Double, dfje As Double’借方金额,贷方金额
Dim jfjelj As Double, dfjelj As Double’借方金额累计,贷方金额累计
Dim qcye As Double, ye As Double ’期初余额,期末余额
Dim jhd As String, intcolumnscount As Integer ’ 借或贷 列数
Dim mxznextrow As Double ’下一行
ye = 0
jfjelj = 0
dfjelj = 0
mycounter = 3
dblpzcount = Sheets("jzpzk").Range("a2").CurrentRegion.Rows.Count ’
’以下是登记明细账中的第一行和期初余额
mxznextrow = 4
With Sheets("zb")
.Activate
.Cells(1, 1) = strcurkmmc
qcye = findqcye(dblcurkmdm) ’调用函数,返回期初余额
.Cells(3, 7) = qcye
’根据科目类型填写借贷关系
If (intkmlx = 1 Or intkmlx = 4Or intkmlx = 6) And qcye > 0 Then
.Cells(3, 6) = "借"
ElseIf (intkmlx = 2 Or intkmlx = 3 Or intkmlx = 4) And qcye < 0 Then
.Cells(3, 6) = "贷"
ElseIf qcye = 0 Then
.Cells(3, 6) = "平"
End If
End With
’以下为输出业务数据过程
Do While mycounter <= dblpzcount
Sheets("jzpzk").Activate
’以下是在记账凭证库中查找符合的记录并存到各变量中
With Sheets("jzpz")
kmdm = Val(Trim(Left(.Cells(mycounter, 5), 2 * intkmjb 2)))
rq = .Cells(mycounter, 1)
pzh = .Cells(mycounter, 14)
zy = .Cells(mycounter, 4)
jfje = Val(Trim(.Cells(mycounter, 7)))
dfje = Val(Trim(.Cells(mycounter, 8)))
’将本月数据输出数据到表sheet 3中
With Sheets("zb")
.Cells(mxznextrow, 1) = rq
.Cells(mxznextrow, 2) = pzh
.Cells(mxznextrow, 3) = zy
.Cells(mxznextrow, 4) = jfje
.Cells(mxznextrow, 5) = dfje
For intcolumnscount = 1 To 7 ’给当前行边框画线
.Cells(mxznextrow, _
intcolumnscount).Borders.LineStyle = lContinuous
Next
End With
jfjelj = jfjelj jfje’计算累计
dfjelj = dfjelj dfje
’判断借贷关系并计算余额
If intkmlx = 1 Or intkmlx = 4 Or intkmlx = 6 Then
ye = qcye jfjelj - dfjelj
If ye > 0 Then
jhd = "借"
ElseIf ye < 0 Then
jhd = "贷"
Else
jhd = "平"
End If
Else
ye = qcye - jfjelj dfjelj
If ye > 0 Then
jhd = "贷"
ElseIf ye < 0 Then
jhd = "借"
Else
jhd = "平"
End If
End If
Sheets("zb").Cells(mxznextrow, 6) = jhd
Sheets("zb").Cells(mxznextrow, 7) = Abs(ye)
mxznextrow = mxznextrow 1
mycounter = mycounter 1
End With
Loop
With Sheets("zb")
.Range("a"
[摘 要] 在财务工作中,利用Excel函数多重嵌套方法可以进行账务处理,但自动化程度低,数据保密性差。本文给出了一个在Excel平台下利用VBA技术编制的通用自动化登账程序。
[关键词] Excel VBA;财务;自动登账
[中图分类号]F232[文献标识码]A[文章编号]1673-0194(2008)22-0007-04
1 系统目标
系统的目标决定于会计管理的要求,并受会计人员和计算机人员的素质以及硬件和软件计算机资源的制约,还受其他经济业务系统的影响。
一般来说,账务自动登账系统的目标,可以表述为以记账凭证为原始数据,按照设计的账户体系和系统指标体系,完成全部的分类核算。其具体要求是:能输入系统核算所需资料,主要指利用各种记账凭证进行数据输入;能根据数据资料进行分类核算,随机输出总分类账;能随机输出某个时期任意分类核算的详细信息,即能随机输出任意会计科目的明细账;能够根据需要随机输出会计报表,包括对外报表和其他内部管理需要的报表资料。
本文中把企业能根据需要随机输出各科目的明细账和总账作为程序设计目标。
2 系统文件设计
为了保存数据以及输出账簿及其他内部管理所用会计信息,同时为了系统扩展的需要,本系统需要在Excel中建立各种表格文件,具体情况如下:
2. 1科目代码表(kmdmb)
该表主要存储企业科目代码信息,通常情况下包括科目代码、科目名称、是否明细、科目类型、科目级别。文件结构及示例如表1所示。
2. 3账簿表
该文件用于保存总账和明细账输出的内容格式。文件为临时文件,建账时只需要建立表的结构。另外,在采用计算机进行会计核算时,不单独设置现金和银行存款日记账,而是将这两个科目的核算与其他科目采用同样的方法处理,当需要输出现金或银行存款日记账时,可以利用该账文件结构。该文件结构及示例如表5所示。
2. 4科目发生额及余额表
该文件用于存储企业全部会计科目的发生额和余额等数据,由各月数据的会计凭证数据按照科目逐级汇总形成。具体结构及示例如表3所示。
3 登账程序设计
3. 1登账数据处理过程
登账实际上是根据会计科目反映的经济业务发生的时间顺序逐日逐笔进行分类汇总,采用计算机核算以后,由于系统已经建立了明细账文件的数据结构,当用户需要输出某科目的明细账时,可以通过在凭证号文件和凭证内容文件中选择该科目的发生业务进行输出即可。
如某科目某会计期间所需数据基本处理过程如下:①打开期初余额表,查找用户选定科目的记录,取期初数并添加到要输出的科目的明细账中,并填写摘要;②扫描凭证号文件,如果文件中有科目为用户选定科目的记录,则取当前凭证号、摘要、借方金额、贷方金额等信息并保存到变量中,并计算当前科目的借方发生额合计数、贷方发生额合计数和余额;③根据会计科目的性质,确定借贷方向,然后将凭证号文件中的凭证号、摘要以及该科目的借方发生额、贷方发生额、余额添加到明细账文件中;④选择凭证号文件并下移指针,然后返回到第②步进行处理;⑤将借方合计数、贷方合计数写入到明细账最后一行。根据需要,将该明细账显示或打印即可。
3. 2登账程序设计
根据以上描述,本案设计一个名为zzdz的自动登账函数,该函数将接受用户在列表框中选定的科目编码、科目名称、科目类型、科目级别等4个参数,并根据会计核算的要求将用户选定科目的业务信息登记到账簿中。利用该函数,可以进行总账和明细账的登记,该函数接受参数后运行效果如表5所示。
该函数代码如下:
Public Function zzdz(dblcurkmdm As Double, strcurkmmc As String, intkmlx, intkmjb)
Dim mycounter As Integer’计数器
Dim dblpzcount As Double, kmdm As Double ’
Dim rq As Date, pzh As Integer, zy As String ’日期,凭证号,摘要
Dim month1 As Integer, month2 As Integer’月份
Dim jfje As Double, dfje As Double’借方金额,贷方金额
Dim jfjelj As Double, dfjelj As Double’借方金额累计,贷方金额累计
Dim qcye As Double, ye As Double ’期初余额,期末余额
Dim jhd As String, intcolumnscount As Integer ’ 借或贷 列数
Dim mxznextrow As Double ’下一行
ye = 0
jfjelj = 0
dfjelj = 0
mycounter = 3
dblpzcount = Sheets("jzpzk").Range("a2").CurrentRegion.Rows.Count ’
’以下是登记明细账中的第一行和期初余额
mxznextrow = 4
With Sheets("zb")
.Activate
.Cells(1, 1) = strcurkmmc
qcye = findqcye(dblcurkmdm) ’调用函数,返回期初余额
.Cells(3, 7) = qcye
’根据科目类型填写借贷关系
If (intkmlx = 1 Or intkmlx = 4Or intkmlx = 6) And qcye > 0 Then
.Cells(3, 6) = "借"
ElseIf (intkmlx = 2 Or intkmlx = 3 Or intkmlx = 4) And qcye < 0 Then
.Cells(3, 6) = "贷"
ElseIf qcye = 0 Then
.Cells(3, 6) = "平"
End If
End With
’以下为输出业务数据过程
Do While mycounter <= dblpzcount
Sheets("jzpzk").Activate
’以下是在记账凭证库中查找符合的记录并存到各变量中
With Sheets("jzpz")
kmdm = Val(Trim(Left(.Cells(mycounter, 5), 2 * intkmjb 2)))
rq = .Cells(mycounter, 1)
pzh = .Cells(mycounter, 14)
zy = .Cells(mycounter, 4)
jfje = Val(Trim(.Cells(mycounter, 7)))
dfje = Val(Trim(.Cells(mycounter, 8)))
’将本月数据输出数据到表sheet 3中
With Sheets("zb")
.Cells(mxznextrow, 1) = rq
.Cells(mxznextrow, 2) = pzh
.Cells(mxznextrow, 3) = zy
.Cells(mxznextrow, 4) = jfje
.Cells(mxznextrow, 5) = dfje
For intcolumnscount = 1 To 7 ’给当前行边框画线
.Cells(mxznextrow, _
intcolumnscount).Borders.LineStyle = lContinuous
Next
End With
jfjelj = jfjelj jfje’计算累计
dfjelj = dfjelj dfje
’判断借贷关系并计算余额
If intkmlx = 1 Or intkmlx = 4 Or intkmlx = 6 Then
ye = qcye jfjelj - dfjelj
If ye > 0 Then
jhd = "借"
ElseIf ye < 0 Then
jhd = "贷"
Else
jhd = "平"
End If
Else
ye = qcye - jfjelj dfjelj
If ye > 0 Then
jhd = "贷"
ElseIf ye < 0 Then
jhd = "借"
Else
jhd = "平"
End If
End If
Sheets("zb").Cells(mxznextrow, 6) = jhd
Sheets("zb").Cells(mxznextrow, 7) = Abs(ye)
mxznextrow = mxznextrow 1
mycounter = mycounter 1
End With
Loop
With Sheets("zb")
.Range("a"