資源描述:
《用VBA制作生日提醒器》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、用VBA制作生日提醒器單位工會(huì)比較注重從細(xì)節(jié)上關(guān)心教師,比如對(duì)于逢五逢十年齡的教師在生日前提供一個(gè)生日蛋糕,禮物雖小,但情誼較重。對(duì)于有上百號(hào)老師的數(shù)據(jù),手工查詢,比較麻煩,且容易遺漏。下面將用VBA來實(shí)現(xiàn)生日提醒功能?!痉治觥勘境绦虻牟樵?nèi)掌诜秶蓛蓚€(gè)單元格記錄,設(shè)置日期型,采用手工輸入,允許輸入跨年度的日期,比如2007-11-2至2008-2-13,要實(shí)現(xiàn)生日提醒功能,從以下兩個(gè)條件考慮:1、年齡是否逢五逢十年齡計(jì)算可表示成:查詢年份-出生年份+1,其中出生年份=year(出生日期),出生日期
2、可從身份證的第7至14位提??;查詢年份從查詢?nèi)掌诜秶蝎@取??紤]到跨年度范圍,相應(yīng)查詢年份不止一個(gè),這里引入變量StepYear,用于記錄年跨度,當(dāng)同年時(shí),跨度為0,即StepYear值為0。因此在計(jì)算年齡時(shí),針對(duì)有跨度日期,需對(duì)年跨度逐個(gè)計(jì)算,可用循環(huán)來實(shí)現(xiàn)。年齡計(jì)算完畢,需判斷是否逢五逢十,采用mod函數(shù)實(shí)現(xiàn),如果年齡符合條件,跳出循環(huán)。同時(shí)考慮到后一條件是基于前一條件上加以判斷的,因此循環(huán)之前引入年齡是否符合的標(biāo)記flag,初始flag為假,一旦找到,置flag為真。具體可參看代碼部分。2、到
3、期生日是否在查詢時(shí)間范圍內(nèi)圖1圖2本條件是基于前一條件成立的基礎(chǔ)上來進(jìn)行判斷的,即當(dāng)年齡符合逢五逢十條件時(shí)(具體為flag=true),再考慮到期生日是否在查詢時(shí)間段內(nèi),針對(duì)日期型數(shù)據(jù)的判斷,可直接用”<”、”>”、”=”表示,若在查詢的時(shí)間范圍內(nèi),可表示:查詢起始日期<=到期生日<=查詢結(jié)束日期。其中到期生日不能直接獲取,可以通過dateserial(year(出生日期)+年齡-1,month(出生日期),day(出生日期))來實(shí)現(xiàn)。經(jīng)過以上兩個(gè)條件的篩選,即表示找到符合條件的記錄,添加相應(yīng)信息:
4、姓名、年齡、到期生日,星期等,寫入另一個(gè)工作表中。數(shù)據(jù)如圖1,查詢起始日期和結(jié)束日期分別在單元格B1和D1輸入,生日提醒功能結(jié)果為圖2所示?!敬a】如圖1顯示,合并相應(yīng)單元格,第4行開始輸入數(shù)據(jù)。主要代碼寫在“生日自動(dòng)提醒”按鈕的單擊事件上,具體如下:PrivateSubCmbBirthday_Click()DimStartDay,EndDayAsDate'起始日期、結(jié)束日期變量Dimbirth,tobirthAsDate'出生日期、到期生日變量DimPersonNum,StepYearAsInte
5、ger'記錄累加器、年跨度變量DimflagAsBoolean'年齡條件標(biāo)記DimTempS,sAsStringDimi,jAsInteger……'容錯(cuò)性檢查,代碼略StartDay=Cells(1,2)'獲取查詢起始日期EndDay=Cells(1,4)'獲取查詢結(jié)束日期StepYear=Year(EndDay)-Year(StartDay)'計(jì)算年跨度Fori=4To12'待查詢的記錄數(shù)TempS=Mid(Cells(i,2),7,8)'從身份證提取出生日期birth=DateSerial(Va
6、l(Mid(TempS,1,4)),Val(Mid(TempS,5,2)),Val(Mid(TempS,7,2)))'出生信息轉(zhuǎn)換成日期型數(shù)據(jù)flag=False'初始設(shè)置年齡條件(逢五逢十)為假'由年跨度逐個(gè)檢驗(yàn)?zāi)挲g是否符合Forj=1ToStepYear+1Age=Year(StartDay)-Year(birth)+j'計(jì)算年齡IfAgeMod5=0Thenflag=True:ExitFor'檢驗(yàn)?zāi)挲g條件,若符合,改變標(biāo)記為真,并退出循環(huán)NextIfflag=TrueThen'在年齡符合條件的
7、基礎(chǔ)上tobirth=DateSerial(Year(birth)+Age-1,Month(birth),Day(birth))'計(jì)算到期生日Iftobirth-StartDay>=0Andtobirth-EndDay<=0Then'判斷到期生日是否在查詢?nèi)掌诘姆秶鷥?nèi)PersonNum=PersonNum+1'符合,記錄數(shù)加1WithSheets("結(jié)果")'登記相應(yīng)信息到另一工作表中.Cells(PersonNum+1,1)=PersonNum'序號(hào).Cells(PersonNum+1,2)=Ce
8、lls(i,1)'姓名.Cells(PersonNum+1,3)=Str(Age)'年齡.Cells(PersonNum+1,4)=Trim(Str(tobirth))'到期生日.Cells(PersonNum+1,5)=ChangeWeek(Weekday(tobirth))'星期EndWithEndIfEndIfNext'輸出查詢信息IfPersonNum=0ThenMsgBox"無教師生日提醒!",vbExclamation,"結(jié)果"Else……'添加結(jié)果信息的