VBA如何更新會計期間




一般公認會計原則有個期間假設。我一直記得大學初會教授這麼介紹:一家公司到底賺不賺錢、賺了多少,只有等到結束營業關門大吉才能最終確定,可是投資者和債權人等不及了,所以在會計上要切成期間:每個月、每季度、每年度。很多會計特有的專業術語,例如固資折舊、收入認列、費用配合,都是圍繞著如何分開期間而來。而在會計人的工作,也因為這樣基本上設定為以月為周期,周而復始地以每月結帳為基調,常常每個月結完帳,一大堆管理報表要先更新期間,在此介紹如何以VBA更新會計期間:

一、產品別毛利彙總表,有這個月和上個月的資料,方便比較。此報表每個月都要編製,格式相同,到了下個月,最原始作法,是複製上個月檔案,手工將期間從「1602」改成「1603」、將「1601」改成「1602」。

產品別毛利彙總表

二、上個步驟更新期間需要改六個儲存格,聰明一點的想法,是引用同一來源更新。例如新建一個「參數」工作表,設計好會計期間的填寫表格。

例如新建一個「參數」工作表

三、將報表表頭連結到「參數」工作表,如此一來,每個月只要更新兩個參數,報表期間就更新好了,從六個儲存格減到兩個儲存格。

將報表表頭連結到「參數」工作表

四、類似這樣的情況,Excel專業作法是「名稱」。把上方功能區移到「公式」頁籤,選擇「名稱管理員」,在跳出來的視窗「新增」。

Excel專業作法是「名稱」

五、「編輯名稱」視窗,看起來一目瞭然,新增一個叫「本期期間」的名稱,其內容參照到「=參數!$B$1」。

「編輯名稱」視窗

六、於資料編輯列直接輸入名稱,Excel自動帶出名稱內容。

於資料編輯列直接輸入名稱

七、編寫程式:「Names.Add Name:=”本期期間A”, RefersTo:=”1604″」這是很標準的VBA語法,「Names」是操作對象,「Add」是操作方法,中間以「.」隔開,後面「Name:=」和「 RefersTo:=」是關於此次操作的屬性。順帶一提VBA都是用半形符號,我文章為了編排版面,特地改成全形。「ActiveWorkbook.Names.Add Name:=”本期期間B”, RefersTo:=”=參數!$B$1″」的說明如同程式裡的附註:「’於目前工作簿新增名稱」,應該不難理解。「Current = InputBox(“請輸入本期期間”, “會計期間”) 」這裡用到了VBA特有的函數「InputBox」,兩個參數用法在下一步驟會很清楚。

「Names」是操作對象,「Add」是操作方法

八、執行上一個步驟的「輸入會計期間」巨集,最後會跳出輸入視窗,這裡可以很清楚兩個參數的作用,一個是視窗標題列的內容、一個是輸入提示的內容。

九、執行完巨集,再叫出「名稱管理員」,成功建立好了會計期間的名稱。如果原來有報表期間有設定好使用「本期期間C」和「上期期間C」,在輸入完InputBox對話方塊,會很神奇看到報表自動更新了會計期間。

InputBox是VBA特有的函數,它如同Excel裡面的IF函數一樣,結構簡單但是很實用。IF提供了公式計算中的邏輯判斷,InputBox則是讓Excel輸入方式不再侷限於儲存格,透過對話方塊視窗和名稱,等於是自行設計類似於一般應用程式的輸入界面,這是VBA主要功能之一。不過InputBox在輸入類型上還是有些限制,而且一次只能輸入一個,在某些情況並不適用,必須有另外的方法,這個留待下節介紹。






當前文章延伸閱讀:
VBA自動化