快速瀏覽
實(shí)用案例
|日期控件||簡單的收發(fā)存||收費(fèi)管理系(Access改進(jìn)版)|
|電子發(fā)票管理助手||電子發(fā)票登記系統(tǒng)(Access版)|
|中醫(yī)診所收費(fèi)系統(tǒng)(Excel版)||中醫(yī)診所收費(fèi)系統(tǒng)(Access版)||銀行對賬單自動勾對|
收費(fèi)使用項目
內(nèi)容提要
在生產(chǎn)信息錄入表中錄入數(shù)據(jù)后,想實(shí)現(xiàn)下述目的,請指點(diǎn),謝謝!
1、點(diǎn)擊保存按鈕:將當(dāng)前表的錄入信息復(fù)制增加到“生產(chǎn)信息匯總“表的對應(yīng)列中。
2、點(diǎn)擊修改按鈕:在“生產(chǎn)信息匯總”表查找與當(dāng)前計劃信息所在行對應(yīng)的信息并刪除,同時將當(dāng)前表的錄入信息添加到“生產(chǎn)信息匯總“表的對應(yīng)列中,可以的話按計劃日期排序。
1、物料信息表,是一些基礎(chǔ)信息:
1、他原來的需求是保存錄入數(shù)據(jù)、更新錄入數(shù)據(jù)(刪除舊數(shù)據(jù)再添加新數(shù)據(jù)),還有一個就是按照計劃日期排序,我理解是刪除舊數(shù)據(jù),把新數(shù)據(jù)添加到原來位置,也可以是這樣,在工作表中刪除舊數(shù)據(jù)后,新記錄一般是添加到工作表末尾,然后再對工作表按“計劃日期”排序。
2、由于原表中采用高版本的函數(shù)來處理數(shù)據(jù),我們準(zhǔn)備用代碼來實(shí)現(xiàn),以兼容低版本的Excel。
3、在“生產(chǎn)信息錄入”表中,產(chǎn)品名稱與配方編號應(yīng)該是一一對應(yīng)的關(guān)系,從“產(chǎn)品配方”表、“物料信息表”中可以看來出。原表設(shè)置了數(shù)據(jù)驗(yàn)證,來源是“物料信息”表中的產(chǎn)品名稱,但我認(rèn)為應(yīng)該采用“產(chǎn)品配方”表中的數(shù)據(jù),因?yàn)槲覀兙褪且崛‘a(chǎn)品配方的具體明細(xì)記錄,如果產(chǎn)品名稱不在產(chǎn)品配方表中,那就提取不到數(shù)據(jù),如果用公式處理,可能出現(xiàn)錯誤值,實(shí)在是沒有必要。
4、在“生產(chǎn)信息錄入”表中,配方編號,是根據(jù)“產(chǎn)品名稱”對應(yīng)的數(shù)據(jù),在C2單元格設(shè)置了數(shù)據(jù)驗(yàn)證,但在原表中,沒有跟隨產(chǎn)品名稱更新,需要手工去點(diǎn)選一下,這里我們可以用代碼來處理一下,其實(shí)用公式函數(shù)也好處理,VLOOKUP函數(shù)就行。
5、在“生產(chǎn)信息錄入”表中,B5:J20區(qū)域,數(shù)據(jù)取自兩個工作表,產(chǎn)品配方與物料入庫信息表,E列“含量”,在其他基礎(chǔ)信息表中也沒有這個字段,但也設(shè)置了驗(yàn)證數(shù)據(jù)驗(yàn)證,來自物料信息表K列的規(guī)格,在“物料入庫信息“也有相同的規(guī)格,數(shù)據(jù)驗(yàn)證來源相同,可以確定就是規(guī)格。
制作思路:
1、我們可以把產(chǎn)品配方中的產(chǎn)品名稱、配方編號分別作為嵌套字典dic的key,二級字典的item為一個數(shù)組,從產(chǎn)品配方表中提取“物料名稱、配方、單位”,從物料入庫信息表中提取“含量、物料編號”。這個字典dic定義在“生產(chǎn)信息錄入”表的過程外面。
2、在“生產(chǎn)信息錄入”表中,我們利用工作表的Selection Change事件,在B2單元格動態(tài)添加數(shù)據(jù)驗(yàn)證(dic的keys),下拉錄入產(chǎn)品名稱。
3、我們利用工作表的Change事件,當(dāng)B2單元格產(chǎn)品名稱改變時,我們同步更新C2單元格的數(shù)據(jù)驗(yàn)證,并給C2單元格賦值。當(dāng)C2單元格改變時,我們把字典dic中的對應(yīng)數(shù)據(jù)填入B5:B20區(qū)域。
4、添加一個保存按鈕,調(diào)用modifyData過程。
5、在modifyData過程中,我們把“生產(chǎn)信息匯總”表中的前4列字段連接成一個字符串currKey,作為字典dic的key,把對應(yīng)的明細(xì)數(shù)據(jù)存到一個數(shù)組temp,作為字典的item,我們把“生產(chǎn)信息錄入”表中的B2:E2單元格也同樣連成一個字符串dkey,然后判斷dic中是否存在dkey,如果存在,則提示是否刪除更新保存,如果點(diǎn)了否,則退出不保存。
6、如果程序繼續(xù)往下運(yùn)行,我們把“生產(chǎn)信息錄入表”中dkey、B5:B20區(qū)域數(shù)據(jù)按照“生產(chǎn)信息匯總”表的格式順序(dic中item的格式)寫入數(shù)組temp,然后把temp賦值給dic(dkey),也就是說,如果已存在此dkey,則更新其item ,key的位置不會改變,如果不存在,則將dkey添加到dic,位置在最后。
7、把dic的item展開到數(shù)組temp,再把temp寫入“生產(chǎn)信息匯總”表。
VBA代碼
后記
1、昨天試圖用SQL來完成,但是遇到問題【在Excel VBA中SQL語句不能使用Delete?】,今天重新想辦法。本來還是準(zhǔn)備保存SQL添加新記錄的(記錄集的AddNew方法),但是在查詢已存在記錄的時候,總是出問題,一會能查到,一會又查不到,還不時地出現(xiàn)空行,后來索性來個徹底的,完全放棄SQL。
2、本案例中,前3張基礎(chǔ)信息表還有優(yōu)化的空間,比如把跟“生產(chǎn)信息錄入”相關(guān)的信息整合到一張表中,這樣好取數(shù);工作表中好多“名稱”,好多是直接引用固定單元格,感覺沒有必要。
3、可以考慮增加一個字段“生產(chǎn)單號”,這樣就不用判斷4個字段了,還可以考慮增加一個“流水號”,這樣排序也比較容易。
好,今天就到這里,我們下期再會!