vba实训报告.docx

上传人:b****5 文档编号:8808881 上传时间:2023-05-15 格式:DOCX 页数:14 大小:301.24KB
下载 相关 举报
vba实训报告.docx_第1页
第1页 / 共14页
vba实训报告.docx_第2页
第2页 / 共14页
vba实训报告.docx_第3页
第3页 / 共14页
vba实训报告.docx_第4页
第4页 / 共14页
vba实训报告.docx_第5页
第5页 / 共14页
vba实训报告.docx_第6页
第6页 / 共14页
vba实训报告.docx_第7页
第7页 / 共14页
vba实训报告.docx_第8页
第8页 / 共14页
vba实训报告.docx_第9页
第9页 / 共14页
vba实训报告.docx_第10页
第10页 / 共14页
vba实训报告.docx_第11页
第11页 / 共14页
vba实训报告.docx_第12页
第12页 / 共14页
vba实训报告.docx_第13页
第13页 / 共14页
vba实训报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

vba实训报告.docx

《vba实训报告.docx》由会员分享,可在线阅读,更多相关《vba实训报告.docx(14页珍藏版)》请在冰点文库上搜索。

vba实训报告.docx

vba实训报告

程序设计实习报告

四川化工职业技术学院

 

题目VBA实训报告

系别信息工程系

班级计应1031班

姓名王程

学号11号

 

起止时间:

12月12日-------12月24日

2011年

目录

一、日志3

日志一3

日志二3

日志三3

日志四4

二、设计过程4

1.设计思路4

2.设计表5

3.录入代码设计5

4.搜索功能设计6

5.生成分数单8

6.生成统计表8

主界面9

三、参考文献11

一、日志

日志一

今天我们开始了做vba实训,说实话我还是蛮期待的,因为我觉得在当今的社会中如果是把一个管理系统做好的话,那么我们将会节约很多的时间来完成其他的事项。

将学生信息表,学生分数表,统计表和打印分数单做好,将表设计好后按照书上的内容将窗体设计好,不知不觉时间就过了,我发现其实vba也没有什么难的,只是有时候是没有好好的看书,没有好好的理解,于是将以前不懂的就积压在那里,越累越多,造成了上课听不懂的问题。

接着开始做窗体设计了,有查询分数,高级查找,添加与更新分数表。

做好了之后开始录入代码,我还觉得录入代码的时候挺好玩的,结果很多的时候就是因为觉得简单照着书上做的就掉以轻心,粗心大意。

这是我们的一个很大的缺点。

由于在做的时候因为很多的代码都是相同的,所以我就复制粘贴过来,但是因为其中个别控件不同,执行起来就出错。

所以,今天给我的启发就是人还是要踏踏实实的一步一步的做。

日志二

第二天了,昨天我做了窗体设计,今天接着做搜索代码。

这个搜索代码挺有意思的,因为有个普通查找还有高级搜索。

做普通查找的时候,我觉得从总体来做的话,首先是要把整体的框架做出来,然后再分布的添加枝节。

接着是高级搜索,在高级搜索中,由于涉及到每个控件都要给他们做控件的唯一性,所以工作量还是有点多。

做分数项和数值范围时,我有点不懂的是怎么做出来的,并且里面还有参数的传递,这下子头就大了,不知道从何下手。

并且有的代码一点都不熟悉,如果完全是按照书上做的还是可以,但是不光是要把代码写出来,还要把这些代码熟练掌握。

因为我们不是为了完成一个作业而完成的,我们是为了我们在学校多多掌握知识而做的。

不管怎样,我想还是要多多的了解。

有的不同的就问下老师,我认为还是有必要的。

所以我还是要去问了老师到底是怎么做的,这样做的意思是怎么样的。

结果通过老师和自己的努力还是了解了。

日志三

今天做了两个项目,就是打印分数单和统计,在做打印分数单的时候因为定义了太多的变量一会有加以,一会又加二,做着做着就浮躁起来了,因为根本就看不懂是怎样做的。

但是没有办法,不可能因为遇到了一点点的问题就放弃或是在没有一点点的思考就去问别人,于是我还是只有逼着自己去看这些令人头疼的代码,不知道是我一下子就有了灵感还是怎么样的,我还是明白了这些代码的含义。

我首先是把两个表对照起来看,然后我在把那些变量转换为一个数值,于是答案就迎刃而解了。

做统计表的时候这个就问题大了,首先不说其他的,光是代码就是够多了,然后是结构也是相当的复杂,再者是功能也挺强大的。

首先还是要把这些代码输入进去,在输入的同时我是把他的大致的结构勾勒出来,这样才更加的方便看懂。

这个是我写了几遍才执行出来的。

没办法啊,代码太多了,只有找方法把这些理解了。

相信自己。

我看书上说的因为有这么多的变量然后将每个变量的属性名字都改了,这样避免代码混乱。

这个还是给了我一点启发:

凡是还是首先要自己思考,要相信自己能够把它解决的,很多人之所以埋没就是因为在遇到问题的时候始终相信别人做的才是正确的,殊不知每个人的思维不同,不一定别人的就是正确的,自己的就是错误的。

日志四

终于做完了,就剩了一个主界面。

主界面还是挺简单的,就是在工作表中插入几个控件,然后再根据控件弹出相应的内容。

回想前几天的时候,有的还是值得回味的。

不是因为不懂就不做,不是因为不懂就放着不管,很多的时候就是因为自己懒,不管不顾,放任自己在轻松的环境中慢慢的沦陷。

有的时候会在夜深人静的时候想想这样子到底该不该,于是产生了一个念头从明天开始要改变,可是明天还是依然是这样。

我想这个还是归功于自己的意志力不够还有就是根本就不了解以后工作的竞争压力是多大。

我想在大学生活中是应该有个轻松自由的生活环境,可是假如在大学当中通过自己的努力来成就以后的人生我认为还是有必要的。

毕竟大学是个学习真正本事的地方,不管是在专业课或是人际关系或是在工作上都要好好的锻炼。

二、设计过程

1.设计思路

目前很多的公司和企业在考核员工素质时,都需要这样一套系统,一方面这些公司或者企业需要快速高效的评估员工的水平,另一方面自动化办公更能体现出公平公正的原则,从而可以提高企业形象。

今天做的是学生信息表,由于学校每次考试的面积都很大,参与人数很多,若是采用人工评估的方式,肯定会降低整个学校的运作效率,如果在这一个环节大大提升了效率,那么可以省出很多时间来完成其他的重要工作。

在做这个程序之前首先应了解这些功能是什么,做这些程序的意义是什么。

那么可以这样分析这个成绩管理系统功能,

1.需要在系统中存放考生信息,用来和考生的分数构成关联

2.需要有考生的分数录入系统,这是分析整个学校状况的基础

3.需要能够修改考生信息,因为可能出现登分错误或改卷有误,分数更变等情况,所以这一步也是必须的

4.实现分数查询功能,最好提供各种级别的查询,让老师分析问题是,可以迅速找到所有的信息

5.能将每个考生信息分离,以便打印是每个考生的成绩单

6.对每个班级进行评估

7.对全年级进行评估

8.能根据教师的具体需要提供个性化评估

2.设计表

在开始所有的代码编写之前,需要先设计好将要设计到的每个工作表的框架。

那么首先第一步是设计表,分别为:

1.学生信息表设计:

关于一个大体的信息,如编号,姓名,班级,性别。

这里需要注意的是学生信息的位置要设计好,因为以后激昂会应用该表中的单元格的值,所有在设计时要了解每行,每列代表的意思。

那么可以延伸到以后的工作当中:

员工编号,姓名,所在单位,性别。

2.学生分数表的设计:

该表用于录入每个学生考试的成绩

3.综合统计表:

本表显示的信息包括每个班级的综合信息,整个班级的总体信息和男女生综合信息。

综合信息应该包括该项目的人数和平均分。

3.录入代码设计

既然要给学生分数录入信息,首先要设计出对应的窗体,毕竟要通过窗体来录入信息要更直观和简便。

If(trim(textbox1.text)=""or(trim(textbox2.text)=""

这段代码是验证编号和姓名这样的关键信息是否输入正确,否则将无法完成录入任务。

这样保证了数据的有效性

Setflag=true

While(notisempty(sheets(“学生分数表”).cells((tempy,1).value))

If(trim(textbox1.text(sheets(“学生分数表”).cells(temp,1).value))then

…….

Endif

Setflag=false

Gotorenew

Wend

这段代码是判断是否已存在记录。

我认为这个代码是一个中间点。

那么这个代码的含义即:

当有记录的时候就是修改数据,然后直到执行setflag=false,然后再跳转子程序,最后因为flag=false,所以就不会执行下面的添加记录的语句。

当无数据(或是文本框为空)的时候,isempty(sheets(“学生分数表”).cells((tempy,1).value))这里的判断为true,但是前面有个not,所以这里就是false。

就会自动的跳入子程序renew这里说明当跳入子程序中就会执行添加记录。

总结几句话为:

更新操作和录入操作都是把文本框中的信息摘录到工作表中,不同之处在于更新时针对已有记录信息,而录入是针对没有的信息,所以当判断存在该记录,就会执行更新操作,当判断不存在该记录,就会执行录入操作。

两者的代码结构完全相同。

4.搜索功能设计

先设计简单搜索搜索功能的界面。

简单搜索就是用来完成对学生编号的搜索,或者完成对学生姓名的搜索。

考虑到后面的复杂搜索的功能,这里需要留一个按钮,作为用户进入复杂搜索的接口。

在做简单功能设计的时候把他复杂简单化即为:

If(trim(textbox1.text)<>””)then

Elseif(trim(textbox2.text)<>””)then

Else

Endif

这里的意思就是当第一个文本框不为空的时候,那么就执行第一条语句,按照编号查找记录。

当第二个文本框不为空的时候(那么这里也说明第一个文本框为空)执行的是第二条语句按照姓名查找记录,如果第一二条语句都是空的话,那么就执行第三条语句即:

弹出对话框表明这里第一二个文本框为空,请输入信息。

这里要注意的是:

假如第一二个都不为空,但是编号与姓名不一致时,也是按照编号查找的,因为程序的执行时按照从上往下顺序执行的。

最后大范围的概括是:

主功能是从记录的第一行开始,逐行的搜索记录,知道记录被搜索完毕,当文本框中的信息和记录吻合时,就选中该记录,并进入学生分数信息表中。

否则将不会进行任何操作,当文本框全部为空时,提示用户输入信息。

接下来是高级搜索函数,这里有点难,但是在做这个程序的时候应该有个观念是:

所有的数据都是有个框架的,最主要的是把整体的框架罗列出来,然后再逐步的添加。

但是首先还是要了解下按钮的属性值。

这里的按钮是当选中谁的时候谁就是为true代表是活动的,其余的全是不可用的即为false。

这里的工作量有点大,因为每个都要输入。

 

 

那么这里的主要框架是:

当参数被传入函数中,函数首先要激活分数信息工作表,代码如下:

Sheets(“学生分数表”).select

然后需要逐步的审核记录,它同样采用while循环

Dimtempyasinteger

While(notisempty(sheets(“学生分数表).cells(tempy,1).value))

…….

Wend

接下来的任务就是完成循环中搜索功能代码的编写,然后再将它一般化,推广到使用各类类型的情况。

代码如下:

If(typtemp=1)then

小于判断代码

……..

Elseif(typtemp=2)then

等于判断代码

………..

Elseif(typtemp=3)then

大于判断代码

…….

Endif

这里是小于判断的代码:

if(Sheets("学生分数表").Cells(tempy,1).Offset(0,(colvalue+1)).Value

If(vbOK=MsgBox("是"&Sheets("学生分数表").Cells(tempy,2).Value&"吗?

",vbOKCancel,"确认"))Then

Sheets("学生分数表").Range("A"&CStr(tempy)&":

J"&CStr(tempy)).Select

End

假设tempy=2,那么这里的代码含义就是从第2行开始往下查找limitvalue(就是textbox1的值),然后弹出对话框询问是该记录吗?

如果不是在往下继续查找再询问,最后确定之后选择改行的记录,退出。

其实小于判断是镶嵌在If(typtemp=1)then里的。

当进入小于判断代码中后,说明下offset的含义光标的移动,由于这里的行值为0,那么就保持不变,而coltemp(就是项目对应的参数值),当coltemp+1,那么自然的就是光标下移。

还有就是这个程序运用了参数,所以涉及到参数的传递(代码中分别用colvalue应用coltemp的值,用numvalue应用typetemp的值,用limitnum应用textbox1的值。

)这里还要说明下limitvalue的含义其实就是引用textbox1文本框中的值,当textbox1的值是什么,那么limitvalue的值就是什么。

由于搜索结果可能不只是一个,程序从上往下依次让用户选择,直到用户选择一条合适的记录之后,程序终止。

5.生成分数单

分数单是用来给学生发送成绩的,要求保证每人的分数单种都要有该考生完整信息和对应的标题。

它的作用是给每个学生分数信息记录加上一个标题栏,如果手工输入肯定会因为工作量过大而被放弃,所以给表添加一个功能按钮,让他们自动生成分数条。

'此代码为两层循环,第一层在学生分数表工作表中,逐行循环,每循环一次,都会在分数单工作表中执行一个完整的第2层循环。

'第二层循环管会根据学生分数表工作表中每行的值,分别在分数表中写入两行记录,第1行为标题,第二行为此次循环分数表工作表所在的记录

简单的循环是这样看的:

'分数单(4,1)=分数表(2,1)

'分数单(5,1)=分数表(3,1)

'分数单(4,2)=分数表(2,2)

分数单第4行第1列的值=分数表第2行第1列的值,依次类推。

tempy=tempy+2的含义其实就是在分数单中要跳2行输入标题和记录。

'tempcount=tempcount+1的含义是在分数表中记录下移一条。

'分数单(5,2)=分数表(3,2)

'tempy=tempy+2

'tempcount=tempcount+1

 

'分数单(6,1)=分数表(2,1)

'分数单(7,1)=分数表(4,1)

6.生成统计表

在做这个生成统计表时真的时做得崩溃的了,因为这个确实时太复杂了,并且功能也还是非常强大,就算是在做得的时候也要很仔细入微。

因为只要是有一个代码拼写错误那么就执行不起,况且还要把它消化掉的确是很难的。

我是反复做了几遍才做出来的。

此代码是对班级人数的统计,班级人数,男生人数,女生人数,男生总分,女生总分,班级平均分,总人数,总平均分,男女生平均分。

6.1首先是人数统计

人数的统计需要在学生信息,而总分的统计则要在学生分数表中求出。

最后都要存放在统计表中。

If((“一班”=sheets(“学生信息表”).cells(tempy,4).value))then

Class1=class1+1

这是对一班的统计,也可以说也可以对其他的班级做统计

而对于男女生的人数的统计判断则是基于对性别的值。

代码如下:

If((“男”=sheets(“学生信息表”.cells(tempy,3).value))then

Boy=boy+1

6.2接着是班级总分

对于班级总分的求解,需要同时调用到学生信息表和学生分数表,那么就可以选择其中一个表来执行循环。

我选的是对学生信息表进行逐行循环。

此方法时对每次循环中涉及到的学生,将他的编号和学生分数进行对比,根据编号判断该学生分数,然后根据班级,吧这行记录中的总分记在对应班级的总分中。

While

If(Sheets(“学生信息表”).Cells(tempy,1).Value=Sheets(“学生分数表”).Cells(tempx,1).Value)Then

‘信息表(3,1)=分数表(3,1)

class1value=class1value+CInt(Sheets(“学生分数表”).Cells(tempx,10).Value)

EndIf

tempx=tempx+1

wend

接着上面的班级人数统计,以一班为例。

首先查找一班,然后在判断在信息表中第三行第一列的值是否等于分数表中第三行第一列的值。

如果是相等的话,那么将分数表中的总分加上。

这里的class1value变量代表的是累加。

因为是查找的所有的一班的总分。

6.3再是男女生人数和总分

While(NotIsEmpty(Sheets("学生分数表").Cells(tempx,1).Value))

If(Sheets("学生信息表").Cells(tempy,1).Value=Sheets("学生分数表").Cells(tempx,1).Value)Then

boyvalue=boyvalue+CInt(Sheets("学生分数表").Cells(tempx,10).Value)

EndIf

tempx=tempx+1

Wend

由于上面已说了男生人数,那么就如班级总分一样。

了解了这些在将这些组合起来就可以了。

主界面

一个功能较多的程序,自然少不了使用主界面来引导用户快速了解它的各种功能,它将本程序将要用到的所有功能都列于主界面,用户可以明白程序的全部功能,并可以方便的使用各功能.

下面是各个控件的功能用于不同的表和窗体。

 

三、参考文献

ExcelVBA实训报告/王程编著.四川化工职业技术学院信息工程系综C5022011.11

(程序员书库)

ISBN978-7-122-05877-5

ISBN978-7-89472-126-6(光盘)

中国版本图书CIP数据核字(2009)第089556号

出版发行:

四川化工职业技术学院信息工程系计应1031班

印装:

四川化工职业技术学院图书馆

2011年11月四川第一版

网址:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2