WEB开发网
开发学院软件教学办公软件Word 利用宏实现成绩登记表 阅读

利用宏实现成绩登记表

 2010-03-26 00:00:00 来源:WEB开发网   
核心提示: 4.设计自定义过程Score_Statistic宏,Score_Statistic的主要功能如下:从表格的单元格中取出学生的3项成绩调用Convert_Int函数进行数据转换;根据课程性质和总成绩构成的百分比计算期末总成绩;对学生的4项成绩进行格式处理:低于60分加框,利用宏实现成绩登记表(3)

4.设计自定义过程Score_Statistic宏,Score_Statistic的主要功能如下:

从表格的单元格中取出学生的3项成绩调用Convert_Int函数进行数据转换;根据课程性质和总成绩构成的百分比计算期末总成绩;对学生的4项成绩进行格式处理:低于60分加框,考试课程期末总成绩低于45分加阴影、考查课总成绩以5级等第表示、缺考的成绩不作处理;根据期末总成绩进行各分数段人数累计;统计期末总成绩低于45分的人数;Score_Statistic的参数为为待处理的单元格的行列号。

四、操作过程

进入Word打开待处理的成绩登记表,确定考试性质、输入学生各项成绩的分数或等第、输入总成绩构成比例后,鼠标左击图3中的“成绩统计”按钮,即可进行成绩自动处理。

经过处理以后的成绩表如图4、图5和图6所示。

  查看原图(大图)

图4  处理以后的考试课程成绩表

  查看原图(大图)

图5  处理以后的考查课程成绩表

图6 成绩分布

五、源代码

`alculate宏代码
Private Sub calculate()
  Dim number_of_stu As Integer, i As Integer, j As Integer
  Dim student_id As String
  Dim fraction As Single
  exam_or_check = ThisDocument.OptionButton1.Value
  proportion(1) = Val(ThisDocument.Tables(1).Cell(33, 2).Range.Text)
  proportion(2) = Val(ThisDocument.Tables(1).Cell(33, 4).Range.Text)
  proportion(3) = Val(ThisDocument.Tables(1).Cell(33, 6).Range.Text)
  If proportion(1) + proportion(2) + proportion(3) <> 100 Then
    MsgBox "平时成绩:实验成绩:期末成绩三项之和不等于100", vbOKOnly, message_title
    Exit Sub
  End If
  number_of_stu = 0
  For i = 1 To 7: grade_proportion(1, i) = 0: grade_proportion(2, i) = 0: Next      '成绩分布初始化
  For i = 1 To 25
    ThisDocument.Tables(1).Cell(i + 1, 4).Range.Font.Size = 9    '设置字号
    ThisDocument.Tables(1).Cell(i + 1, 5).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 6).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 7).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 4).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter  
'设置对齐方式
    ThisDocument.Tables(1).Cell(i + 1, 5).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ThisDocument.Tables(1).Cell(i + 1, 6).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ThisDocument.Tables(1).Cell(i + 1, 7).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    student_id = Trim(ThisDocument.Tables(1).Cell(i + 1, 2).Range.Text)     '取学号
    If Len(student_id) > 2 Then      '计算成绩表左侧成绩
      number_of_stu = number_of_stu + 1
      Call Score_Statistic(i, 4)
    End If
    ThisDocument.Tables(1).Cell(i + 1, 11).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 12).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 13).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 14).Range.Font.Size = 9
    ThisDocument.Tables(1).Cell(i + 1, 11).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ThisDocument.Tables(1).Cell(i + 1, 12).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ThisDocument.Tables(1).Cell(i + 1, 13).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    ThisDocument.Tables(1).Cell(i + 1, 14).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    student_id = Trim(ThisDocument.Tables(1).Cell(i + 1, 9).Range.Text)     '取学号
    If Len(student_id) > 2 Then     '计算成绩表右侧成绩
      number_of_stu = number_of_stu + 1
      Call Score_Statistic(i, 11)
    End If
  Next i
  If number_of_stu = 0 Then MsgBox "没有学生成绩数据", vbExclamation + vbOKOnly, message_title: Exit Sub
  '计算成绩分布
  fraction = 100
  For i = 1 To 7
  If grade_proportion(1, i) > 0# Then
  grade_proportion(2, i) = Round(grade_proportion(1, i) / number_of_stu * 100, 1)
  If i < 7 Then fraction = fraction - grade_proportion(2, i): j = i   '考试课程卷面成绩<45
`不用调整百分比
    Else
    grade_proportion(2, i) = 0
    End If
  Next
  '百分比调整为100%
  If Abs(fraction) >= 0.05 Then grade_proportion(2, j) = Round(grade_proportion(2, j) + fraction, 1)
  For i = 1 To 7
    ThisDocument.Tables(1).Cell(31, i + 1).Range.Text = grade_proportion(1, i)
    ThisDocument.Tables(1).Cell(32, i + 1).Range.Text = grade_proportion(2, i)
  Next
  MsgBox "成绩登记完毕,请检查", vbOKOnly, message_title
End Sub

上一页  1 2 3 4  下一页

Tags:利用 实现 成绩

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接