资源描述:
《用VBA制作生日提醒器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、用VBA制作生日提醒器单位工会比较注重从细节上关心教师,比如对于逢五逢十年龄的教师在生日前提供一个生日蛋糕,礼物虽小,但情谊较重。对于有上百号老师的数据,手工查询,比较麻烦,且容易遗漏。下面将用VBA来实现生日提醒功能。【分析】本程序的查询日期范围由两个单元格记录,设置日期型,采用手工输入,允许输入跨年度的日期,比如2007-11-2至2008-2-13,要实现生日提醒功能,从以下两个条件考虑:1、年龄是否逢五逢十年龄计算可表示成:查询年份-出生年份+1,其中出生年份=year(出生日期),出生日期
2、可从身份证的第7至14位提取;查询年份从查询日期范围中获取。考虑到跨年度范围,相应查询年份不止一个,这里引入变量StepYear,用于记录年跨度,当同年时,跨度为0,即StepYear值为0。因此在计算年龄时,针对有跨度日期,需对年跨度逐个计算,可用循环来实现。年龄计算完毕,需判断是否逢五逢十,采用mod函数实现,如果年龄符合条件,跳出循环。同时考虑到后一条件是基于前一条件上加以判断的,因此循环之前引入年龄是否符合的标记flag,初始flag为假,一旦找到,置flag为真。具体可参看代码部分。2、到
3、期生日是否在查询时间范围内图1图2本条件是基于前一条件成立的基础上来进行判断的,即当年龄符合逢五逢十条件时(具体为flag=true),再考虑到期生日是否在查询时间段内,针对日期型数据的判断,可直接用”<”、”>”、”=”表示,若在查询的时间范围内,可表示:查询起始日期<=到期生日<=查询结束日期。其中到期生日不能直接获取,可以通过dateserial(year(出生日期)+年龄-1,month(出生日期),day(出生日期))来实现。经过以上两个条件的筛选,即表示找到符合条件的记录,添加相应信息:
4、姓名、年龄、到期生日,星期等,写入另一个工作表中。数据如图1,查询起始日期和结束日期分别在单元格B1和D1输入,生日提醒功能结果为图2所示。【代码】如图1显示,合并相应单元格,第4行开始输入数据。主要代码写在“生日自动提醒”按钮的单击事件上,具体如下:PrivateSubCmbBirthday_Click()DimStartDay,EndDayAsDate'起始日期、结束日期变量Dimbirth,tobirthAsDate'出生日期、到期生日变量DimPersonNum,StepYearAsInte
5、ger'记录累加器、年跨度变量DimflagAsBoolean'年龄条件标记DimTempS,sAsStringDimi,jAsInteger……'容错性检查,代码略StartDay=Cells(1,2)'获取查询起始日期EndDay=Cells(1,4)'获取查询结束日期StepYear=Year(EndDay)-Year(StartDay)'计算年跨度Fori=4To12'待查询的记录数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)))'出生信息转换成日期型数据flag=False'初始设置年龄条件(逢五逢十)为假'由年跨度逐个检验年龄是否符合Forj=1ToStepYear+1Age=Year(StartDay)-Year(birth)+j'计算年龄IfAgeMod5=0Thenflag=True:ExitFor'检验年龄条件,若符合,改变标记为真,并退出循环NextIfflag=TrueThen'在年龄符合条件的
7、基础上tobirth=DateSerial(Year(birth)+Age-1,Month(birth),Day(birth))'计算到期生日Iftobirth-StartDay>=0Andtobirth-EndDay<=0Then'判断到期生日是否在查询日期的范围内PersonNum=PersonNum+1'符合,记录数加1WithSheets("结果")'登记相应信息到另一工作表中.Cells(PersonNum+1,1)=PersonNum'序号.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,"结果"Else……'添加结果信息的