孫 瑜,羅孝騫
(黑龍江工業(yè)學院,黑龍江 雞西 158100)
票據(jù)打印是應(yīng)用軟件開發(fā)中一項比較費時的工作,而且對于精確打印(銀行支票、進帳單等)設(shè)置比較繁瑣,利用報表控件(如Data Report,水晶報表等)實現(xiàn)精確打印又需要經(jīng)過一段時間的學習,上手慢,效果也不理想。那么,有沒有簡單有效而又靈活的方法實現(xiàn)上述功能呢?筆者在實踐中經(jīng)過VB調(diào)用access和excel實現(xiàn)精確打印支票、進帳單等,該方法易學好用,而且功能強大。下面筆者結(jié)合票據(jù)打印中經(jīng)常困擾財務(wù)工作人員的問題,談?wù)勅绾吻捎肰B調(diào)用access和excel實現(xiàn)票據(jù)精確打印。
1.如何在固定大小的單元格內(nèi)實現(xiàn)自動換行及字體大小的自動切換。
2.如何在固定單元格內(nèi)實現(xiàn)字間距的控制(支票等在小寫數(shù)字打印過程中用到)。
3.如何在數(shù)字前加入¥字符。
4.如何對打印過的數(shù)據(jù)實現(xiàn)自動記憶,自動更新,自動引用。
5.如何對頁面進行后期控制。
1. 如何在固定大小的單元格內(nèi)實現(xiàn)自動換行及字體大小的自動切換。
VB調(diào)用excel的好處是我們對格式設(shè)置都可以在excel中進行(excel這些年比較普及,大多數(shù)人用得比較熟練),VB程序只是給excel附值,對于第一個問題我們舉例說明。
當我們要在一個固定大小的單元格內(nèi)輸入1—30個漢字時(比如銀行開戶名一般不會超過30個漢字),字號為10號,1-7個漢字為一行(單元格可容下二行10號字),我們把單元格直接在excel里設(shè)置成自動換行,1-14個漢字時這個單元格就滿了(二行),再超過這個字數(shù)時怎么辦(自動換行和縮小字體在excel里不能同時應(yīng)用)?這里我們用一下excel的宏,讓漢字數(shù)在超過14個漢字時自動縮小為8號,這樣就可以使所輸字符全部可見。具體操作如下:
If (Len(Sheet1.Cells(2, 4)) <= 20) Then
Sheet1.Cells(2, 4).Font.Size = 10
Else
Sheet1.Cells(2, 4).Font.Size =8
End If
注釋:LEN 返回文本串的字符數(shù),F(xiàn)ont.size字號控制。
這里我們簡單介紹一下excel的宏,Excel的宏是由一系列的Visual Basic語言代碼構(gòu)成的,因此,如果用戶熟悉Visual Basic 語言,可以用它編寫為宏,如果用戶不熟悉VB語言,可以用記錄功能建立宏。下面介紹一下有關(guān)的方法和技巧。
建立宏的方法有兩種:一是用宏記錄器記錄所要執(zhí)行的一系列操作;二是用Visual Basic語言編寫。這兩種方法各有優(yōu)越之處,自動記錄宏可以使用戶在不懂Visual Basic 語言的情況下也可建立自己的宏,但缺點是對于一些復(fù)雜的宏要記錄的操作很多,而且可能有些功能并非是能通過現(xiàn)有的操作所能完成的;自己動手編寫宏則不必進行繁瑣的操作而且能實現(xiàn)自動記錄所不能完成的一些功能。在這里需要說明的一點是,即使自動記錄的宏,記錄器也是把它翻譯成Visual Basic語言來存放的,因此,在這里的一點技巧是你可以使用自動記錄功能記錄宏,記錄完畢后再打開宏進行編輯、修改簡化或增強宏的功能,這樣可省去許多輸入代碼的工作。
2.如何在固定單元格內(nèi)實現(xiàn)字間距的控制。
對字間距的控制主要用在支票、進帳單等數(shù)字部份的控制。這里用到二個函數(shù)(都在是excel單元格內(nèi)使用),CONCATENATE (text1,text2,...) 連接函數(shù),MID(text,start_num,num_chars)從字符串中讀取數(shù)據(jù)。用法如下:
=CONCATENATE(" ",MID(G16,1,1)," ",MID(G16,2,1)," ",MID(G16,3,1)," ",MID(G16,4,1)," ",MID(G16,5,1)," ",MID(G16,6,1)," ",MID(G16,7,1)," ",MID(G16,8,1)," ",MID(G16,9,1)," ",MID(G16,10,1)," ")&" "。
因為會計數(shù)字,一般不會超過10位數(shù)字。其中做下說明,這里我們是利用空格來控制間距大小,而空格的大小是根據(jù)字號判斷的。注意一點,我們從VB附值時,不要把值附到有公式的單元格內(nèi),這樣會替換掉公式,我們要利用一個過渡單元格,上例G16就是一個過渡單元格,調(diào)試好后將G16的字體顏色設(shè)成透明就可以了。
3. 如何在數(shù)字前加入¥字符。
如何在所生成的數(shù)據(jù)前加上¥符號,我們可以在單元格中設(shè)置如下公式:
=IF(G13="","",IF(G13<10000000000,"¥",)&WIDECHAR(ROUND(G13,2)))
其中用到二個函數(shù),widechar函數(shù),其功能是將單字節(jié)轉(zhuǎn)換成為雙字節(jié);round,返回某個數(shù)字按指定位數(shù)取整后的數(shù)字。用這二個函數(shù)進行處理的數(shù)據(jù)打印出來后,¥符號就加到你要打印的數(shù)值前方了。同樣G13也是個輔助單元格。
4. 如何對打印過的數(shù)據(jù)實現(xiàn)自動記憶,自動更新,自動引用。
自動記憶、自動更新、自動引用主要是針對支票、進帳單、郵政單據(jù)、物流單據(jù)而言。我們可以使用VB加access數(shù)據(jù)庫操作。這里筆者主要講一下流程、思路及所用到的SQL語言。
(1)自動記憶。先在access建立個表,利用SQL語言,即INSERT INTO 表名稱 VALUES (值1, 值2,....)語句,將我們要記憶的數(shù)據(jù)加入到表里,這樣就完成了記憶功能。
(2)自動更新。由于一個單位的名子不會變,開戶行、帳號和其它一些信息是要變化的,所以我們要用到更新。首先要利用SQL語言的條件查詢語句(SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值)對表進行查詢,如果沒有查到,說明以前沒有輸入過,那么直接進入自動記憶環(huán)節(jié),將數(shù)據(jù)插入到表中;如果有,則利用SQL語言(更新語句UPDATE 表名稱 SET 列名稱=新值 WHERE 列名稱=某值)進行更新處理(對于表中有的數(shù)據(jù)不管變動沒變動,都要進行更新,由于程序量不大,不會影響運算速度)。
(3)自動引用。利用SQL的模糊查詢(SELECT字段FROM表WHERE某字段Like條件),通過輸入用戶名一步一步地精確并在下拉框中顯示,哪個是你想要的用戶雙擊即可,同時引出該用戶名的開戶行、帳號,這里如果沒有該用戶,手動加入開戶行、帳號等信息回到第一步,如果有該用戶,則看開戶行、帳號是否變化,如變化,則手工改動,回到第二步,如無變化無需改動也回到第二步。
5. 如何對頁面進行后期控制。
當我們把格式設(shè)置好后,需要注意里面的一些技巧,對以后票據(jù)的變動(比如進帳單格式變動)我們可以快速修改。
(1)在制作模板時,A列和1行一定要空出來,這樣以后可以用拉A列或1行進行上下右左的調(diào)整(不用去excel的頁面設(shè)置里一點一點調(diào)整)。
(2)輔助單元格和輔助列的應(yīng)用,上面已經(jīng)說明。
我們?yōu)槭裁匆肰B來控制excel呢?我們可以結(jié)合VB和excel的優(yōu)點來對整個模版進行控制(用其它語言效果是一樣的),excel認知度高,大家可以自已對模版進行修改(對不會開發(fā)程序的人而言),友好性強,VB是一種非常易學的開發(fā)軟件,我們可以利用VB和access對打印做記錄、查詢等功能。VB語言還可以來編輯excel的宏,如果會用VB語言,那么,對excel的宏設(shè)計更是方便。
[1]段興.Visual Basic6.0數(shù)據(jù)庫實用程序設(shè)計100例[M].人民郵電出版社,2003.
[2]周慶麟,等. Excel 應(yīng)用大全[M].人民郵電出版社,2008.