輸入明細表時,自動復制上一行內(nèi)容,到末尾自動加新行
需求描述
在輸入表單上明細數(shù)據(jù)的時候,很多情況下,明細數(shù)據(jù)有不少項目是重復的,只有個別項目的值有不同,這種情況下,對操作員最方便的做法,是能自動復制已經(jīng)輸入的數(shù)據(jù)到新的一行上。另外,當明細表的空白行都填滿了之后,希望能夠自動增加一個新的空行出來,而不需要點擊工具欄上的插行按鈕。
設計方法
這里通過在模板上使用VBA來實現(xiàn)上述需求。樣例模板如下:
寫VBA的時候,要思考這樣幾個問題:
- 什么時候執(zhí)行VBA代碼?在這個問題中,我們希望在每一行輸入重量之后自動把本行內(nèi)容復制到下一行,因此,執(zhí)行VBA代碼的時機,是“輸入重量后”,“輸入xxx之后”,是Excel的 worksheet_change 事件,因此,我們的代碼要寫在 worksheet_change 事件處理程序中,還要判斷當前單元格是否落在字段“重量”的行列范圍內(nèi)。
- 如何復制?這個很簡單,取當前行的C列和D列單元格的值,分別復制到下一行的C列和D列中。什么是當前行?當前行的行號是 worksheet_change 事件的參數(shù) target 的 row 屬性,取單元格的值和對單元格賦值,就是對 range 對象的操作,這個是Excel寫VBA的基本知識了。
- 如何判斷到了最后一行?本例的做法是,在模板上,對重量所在的單元區(qū)域做了命名,實際填報的時候,取該命名區(qū)域的末行行號---range(xx).row+range(xx).rows.count-1,如果當前行行號等于此行號,則說明當前已經(jīng)到了最后一行。
- 如何加新行,這個要用到Excel服務器的VBA接口函數(shù) insertRow。
樣例下載
此模板樣例請從此處下載,導入即可。所有的vba代碼都加了注釋,以方便閱讀。