Office中国论坛/Access中国论坛

标题: 用Excel制作学生成绩条 [打印本页]

作者: jsy165    时间: 2004-7-21 21:53
标题: 用Excel制作学生成绩条
用Excel制作学生成绩条

      现在很多学校都在使用Excel来处理学生成绩,但是处理完成绩之后,怎样才能将每个学生的成绩以成绩条方式发给学生呢?这可是个头痛的问题,因为处理完成绩之后会发现,成绩表只有一个表头(如:班别、年级、编号、姓名、总分、名次等),如何才能使每一个学生的成绩记录都有一个表头呢?

  有的同事这样想:首先在每个学生的成绩记录之前插入一个空白行,然后再将表头复制到空白行上不就可以了吗?刚开始时觉得还是有点道理的,可是后来想了一想,我们学校有2000多学生,如果用这种方法给每位学生的成绩记录制一个表头,那得用多少时间?

  如果能自动完成这个过程,那可是最好的,于是我想到了用Excel的VBA来制作学生成绩条。



  解决问题的思路



  因为每个学生只有一个学号,所以学号是惟一的,根据学号惟一性这一特点,使用VBA里的判断语句,如果学号不同,就在两者之间插入一个空白行,然后再在每个空白行粘贴复制的表头,最后使用循环语句,自动制作每个学生成绩记录的表头。



  解决问题的方法



  打开学生的成绩表,我们需要另存为另外一个表来制作成绩条,以免影响成绩表的原貌。

  在VBA的工程资源管理器中双击Sheet1,然后出现代码窗口,在代码窗口输入如下代码:

  Sub cjt()

   Application.ScreenUpdating = False

   Sheets(1).[A1].CurrentRegion.Copy Sheets(2).[A1]

  ’将表一的成绩表复制到表二

   a=(Application.WorksheetFunction.CountA(Sheets(2).[b2:b2000]))*2

  ’sheets(1).[b2:b2000]的字符数的2倍

   Sheets(2).[A1:R1].Borders(xlEdgeTop).LineStyle = xlDouble

   ’sheets(2).[a1:r1]的下边框是双线

   For i = 2 To a

   If Sheets(2).Cells(i, 3) <> Sheets(2).Cells(i + 1, 3) And (Sheets(2).Cells(i, 3) <> "") Then

   Sheets(2).Rows(i + 1).Insert

   End If

   ’如果第三列的上下单元格的值不相等,则在它们之间插入一个空白行

   If Sheets(2).Cells(i, 3) = "" Then

   Sheets(2).[A1:R1].Copy Sheets(2).Cells(i, 1)

   End If

   ’如果第三列中的单元格是空的,则将Sheets(2).[A1:R1]复制到此行

   Next

   Application.ScreenUpdating = True

  End Sub





作者:不详
作者: jxpengyong    时间: 2008-1-23 10:20
Excel的确是一个好用的东西
作者: 刘志文    时间: 2009-3-26 18:57
谢谢分享!!
作者: excel201    时间: 2009-3-26 21:37
使用邮件合并会比编程要快
作者: wanxuming    时间: 2009-4-4 20:14
真真学习




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3