国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用EXCEL VBA批量處理科目匯總表

2021-03-01 23:22許洪品
科學與財富 2021年29期

摘 要:批量憑證裝訂是業(yè)務量較大單位財務基礎工作的一個難題。以用友財務軟件U8為例,利用Excel和VBA,通過按照預設的年、月及憑證范圍,批量完成科目匯總表、憑證封面及包角的打印,以期為提高會計基礎工作效率提供一種思路。

關鍵詞:批量處理;科目匯總表;excel;VBA

0 ?引 ?言

隨著IT技術的不斷普及,以關系數據庫為基礎的管理系統(tǒng)在日常工作中得以廣泛應用,憑證裝訂前的科目匯總表、憑證封面及包角填寫成為會計基礎工作一項必要內容,但對憑證業(yè)務量大的單位如何對該類工作進行批量處理成為一個難以解決的問題。目前較常見的解決辦法有兩種:一種是通過用友財務軟件進行查詢打印;另一種是專門開發(fā)某一管理系統(tǒng)的軟件,根據操作結果來判分。但這兩種方法存在靈活性差、開發(fā)不易的問題。

以用友U8的憑證和科目總賬為例,通過取自數據庫中的數據,利用Excel和VBA,按照預定的的年、月、憑證范圍來批量完成這一過程。

1 ?相關工作簿

為完成批量處理過程,設計了sheet1(分冊)、sheet7(科目匯總)兩個工作表,連接分冊也為憑證信息文件,科目匯總為科目匯總表查詢結果,兩表結構如圖1、圖2。

1.1 ?憑證信息表:sheet1(分冊)

如圖1所示,工作表中,B1為賬務年份,B2為賬務月份,B3為自動統(tǒng)計的憑證總冊數;A列A5以下為記賬憑證第幾冊,B列B5以下為憑證起號,C列C5以下為憑證止號。

如圖2所示,工作表的第二行取自分冊工作表,第三行A列為科目編碼;B列為科目名稱,C列為金額合計借方,D列為金額合計貸方;從第四行開始是根據用友財務軟件U8數據庫中的gl_accvouch表的內容統(tǒng)計所得。

批量處理分下3個步驟。

(1)錄入憑證起止號。先在分冊表的B1輸入年份;在B2選擇月份,B2運用數據驗證菜單功能,設置月份序列,提供下拉列表;B3輸入函數“=COUNT(C6:C200)”,自動統(tǒng)計憑證冊數。

然后,自C6開始向下,逐本輸入每本憑證的末張憑證號。

(2)設文本框、命令按鈕。在sheet7(科目匯總)中,插入文本框,存儲第幾冊憑證。插入兩個命令按鈕,一個上顯示"上一頁",另一個上顯示“下一頁”。

(3)用程序生成科目匯總表。在sheet7(科目匯總)中,按ALT+Fll進入VBE窗口后輸入取數程序代碼,執(zhí)行后從第四行開始顯示統(tǒng)計結果。

3 ?程序代碼

程序代碼如下:[2]

Sub hzb()

Dim i

Dim cn As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim strCn As String, strSQL As String

strCn="Provider=sqloledb;Server=caiwu;Database=UFDATA_011_2019;Uid=sa;Pwd=******;"

'strCn = "Provider=sqloledb;Server=yhcwb;Database=pubs;Uid=sa;Pwd=;"

cn.Open strCn

Rows("4:65536").Select

Selection.ClearContents

ActiveSheet.Cells(1, 1).Select

Dim cMaxPz As String, cMinPz As String

Dim cPZ As String

Dim iLen As Integer, iPos As Integer

'***取出憑證號***

iPos = InStr(1, ActiveSheet.Cells(2, 2), "-")

If iPos = 0 Then ?'******只輸入一個憑證號

cPZ = ActiveSheet.Cells(2, 2)

Else

iLen = Len(Trim(ActiveSheet.Cells(2, 2)))

cMinPz = Left(ActiveSheet.Cells(2, 2), iPos - 1)

cMaxPz = Right(ActiveSheet.Cells(2, 2), iLen - iPos)

End If

'**寫入科目代碼和借貸余額**

If iPos = 0 Then

strSQL = "SELECT ?LEFT(ccode,4) AS km,SUM(md) AS jf,SUM(mc) AS df ?FROM GL_accvouch WHERE iyear="

strSQL = strSQL & ActiveSheet.Cells(2, 3) & " AND iperiod=" & ActiveSheet.Cells(2, 4)

strSQL = strSQL & " AND ino_id=" & cPZ

strSQL = strSQL & " GROUP BY LEFT(ccode,4) ORDER BY LEFT(ccode,4) "

Else

strSQL = "SELECT ?LEFT(ccode,4) AS km,SUM(md) AS jf,SUM(mc) AS df ?FROM GL_accvouch WHERE iyear="

strSQL = strSQL & ActiveSheet.Cells(2, 3) & " AND iperiod=" & ActiveSheet.Cells(2, 4)

strSQL = strSQL & " AND ino_id>=" & cMinPz

strSQL = strSQL & " AND ino_id<=" & cMaxPz

strSQL = strSQL & " GROUP BY LEFT(ccode,4) ORDER BY LEFT(ccode,4) "

End If

rs.Open strSQL, cn

i = 4

Do While Not rs.EOF

ActiveSheet.Cells(i, 1) = rs("km")

ActiveSheet.Cells(i, 3) = Format(rs("jf"), "##,##0.00")

ActiveSheet.Cells(i, 4) = Format(rs("df"), "##,##0.00")

i = i + 1

rs.MoveNext

Loop

Set rs = Nothing

'***************************

'**寫入科目名稱*

strSQL = "select ccode,ccode_name from code where iyear=" & ActiveSheet.Cells(2, 3) & " and len(ccode)=4 order by ccode"

rs.Open strSQL, cn

Do While Not rs.EOF

For i = 4 To ActiveSheet.UsedRange.Rows.Count

If ActiveSheet.Cells(i, 1) = rs("ccode") Then

ActiveSheet.Cells(i, 2) = rs("ccode_name")

End If

Next i

rs.MoveNext

Loop

Set rs = Nothing

cn.Close

r = Range("d650").End(xlUp).Row

Sheet7.Cells(Range("d650").End(xlUp).Row + 1, 4) = "單位:江蘇省地質調查研究院"

r = Range("d650").End(xlUp).Row

Cells(r, 4).HorizontalAlignment = xlRight

End Sub

‘**上一頁**

Private Sub CommandButton1_Click()

If chTxtBx.Value > 1 Then ? '第幾冊憑證

chTxtBx.Value = chTxtBx.Value - 1

qspzh = Sheet1.Cells(chTxtBx.Value + 5, 2).Text

zzpzh = Sheet1.Cells(chTxtBx.Value + 5, 3).Text

Sheet7.Cells(2, 2) = qspzh + "-" + zzpzh

hzb ? ? ? ? ? ? ? ? ? ?'按條件取數

Else

MsgBox "Hi,已經是第一冊了"

End If

End Sub

‘**下一頁**

Private Sub CommandButton2_Click()

fff = Sheet1.Cells(3, 2).Value

ddd = chTxtBx.Value

If Val(ddd) < fff Then

chTxtBx.Value = chTxtBx.Value + 1

qspzh = Sheet1.Cells(chTxtBx.Value + 5, 2).Text

zzpzh = Sheet1.Cells(chTxtBx.Value + 5, 3).Text

Sheet7.Cells(2, 2) = qspzh + "-" + zzpzh

hzb ? '按條件取數

Else

MsgBox "恭喜,已經是最后一冊了"

End If

End Sub

‘**工作表激活,按第一本憑證參數取數**

Private Sub Worksheet_Activate()

chTxtBx.Value = 1

qspzh = Sheet1.Cells(chTxtBx.Value + 5, 2).Text

zzpzh = Sheet1.Cells(chTxtBx.Value + 5, 3).Text

Sheet7.Cells(2, 2) = qspzh + "-" + zzpzh

hzb ? ? ? '按條件取數

End Sub

4 ?方法的優(yōu)點與結論

該方法在Excel2003、Excel2010和用友U8環(huán)境下測試通過,其具有下列優(yōu)點。

(1)簡單易用。該辦法主要利用EXCEL的易操作性進行處理,只要用VBA通過SQL語句將數據取到工作簿中,完成分冊表中相關設置,利用上述代碼即可完成科目匯總表輸出功能。

(2)一數三用。分冊參數可以用于封面批量打印和包角批量打印的數據源,只要按照封面和包角的格式略加設計調整。

(3)可移植性強。上述程序代碼不受用友財務系統(tǒng)本身各表結構影響,具有通用性。其他用戶只需要修改取數程序代碼中的服務器地址和數據庫名稱,就可以使用該方法法來批量處理科目匯總表、憑證封面和憑證包角的打印。

參考文獻:

[1] 衣光臻. 分旬科目匯總表在Excel中的模型構建[J]. 商業(yè)會計,2014(11):128-129.

[2] 羅剛軍. Excel VBA程序開發(fā)自學寶典[M]. 3版. 北京:電子工業(yè)出版社,2014.

作者簡介:

許洪品,男,漢族,江蘇建湖人,1971年5.26,本科,會計師,江蘇省地質調查研究院(江蘇 南京)(210018),研究方向:會計學理論與實踐

課題項目:此文為江蘇省國土資源廳課題“江蘇省地質勘查基金項目資金管理系統(tǒng)開發(fā)”項目階段性成果之一。

龙游县| 河源市| 南投县| 汪清县| 平塘县| 瑞安市| 喀什市| 花垣县| 望谟县| 辽中县| 枣庄市| 水富县| 两当县| 新和县| 陇西县| 哈密市| 西青区| 正安县| 岳阳市| 五河县| 连云港市| 无锡市| 元氏县| 彭水| 时尚| 桃源县| 三都| 浮梁县| 东光县| 永安市| 延庆县| 巢湖市| 盐津县| 浮山县| 东兰县| 太仆寺旗| 自贡市| 周至县| 云南省| 陕西省| 梁河县|