《别怕,Excel其实很简单》系列论坛

Awesome123 Lv.1

关注
我想用excel 制作一个简易的考试系统,现在遇到了一个问题。
根据从不同部门人员收回的考试答卷,在答卷上自动计算出每个人的总成绩(都显示在K45单元格)
现在需要从每张答卷的总成绩提取出来,汇总在另一张新表(成绩统计表)中。
在网上查了很久,都没法解决!
请问哪位大师能帮我写个宏代码出来?非常非常感谢啊。
这是老板交给我的任务,求帮忙啊!!!!



批量提取总分.rar   2014-7-24 21:15 上传

28.37 KB, 下载次数: 57

3351阅读
9回复 倒序

TomingTang Lv.5 2楼

我改了一下以前的程序,程序比较乱,符合你的要求了。你看看。。
  1. Sub 汇总()
  2.     Dim Arr(1 To 1000, 1 To 2), i%, j%, drow%, Erow%, eerow%
  3.     Dim filename As String, wb As Workbook, sht As Worksheet, shtname As String
  4.     Dim fn As String, d, k, str As String
  5.    ' Set d = CreateObject("Scripting.Dictionary")
  6.     '关闭屏幕闪烁和警告框
  7.     Application.ScreenUpdating = False
  8.     Application.DisplayAlerts = False
  9.     'On Error GoTo VeryEnd
  10.    ' ThisWorkbook.Worksheets("sheet1").Range("a2:y550000").ClearContents    '清除汇总表中原来的数据
  11.     i = 1
  12.     filename = Dir(ThisWorkbook.Path & "\*.xls")
  13.     Do While filename <> ""
  14.         If filename <> ThisWorkbook.Name Then             '判断文件是否是本工作簿
  15.             fn = ThisWorkbook.Path & "" & filename
  16.             Set wb = GetObject(fn)                            '将fn代表的工作簿对象赋给变量
  17.             Set sht = wb.Sheets(1)
  18.            ' drow = sht.[a65536].End(3).Row
  19.             '  MsgBox drow
  20.          Arr(i, 1) = sht.Name
  21.            Arr(i, 2) = sht.[k45].Value
  22.            i = i + 1
  23.             wb.Close False
  24.         End If
  25.         filename = Dir
  26.     Loop
  27. VeryEnd:
  28.     ThisWorkbook.Worksheets("sheet1").Range("a2").Resize(UBound(Arr, 1), 2) = Arr
  29.     MsgBox "汇总完成,请查看"
  30.     Application.ScreenUpdating = True
  31.     Application.DisplayAlerts = True
  32. End Sub

学生答卷.zip   2014-7-24 22:05 上传

39.61 KB, 下载次数: 87

TomingTang Lv.5 3楼

忘了提醒一句,总分需要固定在 k45
否则会汇总出错。
建议以后吧模拟你数据也发上来。

Awesome123 楼主 4楼

恩恩,很符合要求了。
但我还想问一下,就是说总分只能记录在K45是吗?那如果要更改单元格呢,要改哪个语句呢?
基本没接触VBA,菜鸟级别求指教!
非常感谢!!!

Awesome123 楼主 5楼

引用: TomingTang 发表于 2014-7-24 22:07
忘了提醒一句,总分需要固定在 k45
否则会汇总出错。
建议以后吧模拟你数据也发上来。

恩恩,很符合要求了。
但我还想问一下,就是说总分只能记录在K45是吗?那如果要更改单元格呢,要改哪个语句呢?
基本没接触VBA,菜鸟级别求指教!
非常感谢!!!

TomingTang Lv.5 6楼

是的,只能 汇总 k45的,具体需要修改 21行代码,“Arr(i, 1) = sht.Name
           Arr(i, 2) = sht.[k45].Value”,具体修改还要看你的表的构造。

Awesome123 楼主 7楼

引用: TomingTang 发表于 2014-7-25 11:59
是的,只能 汇总 k45的,具体需要修改 21行代码,“Arr(i, 1) = sht.Name
           Arr(i, 2) = sht.[k4 ...

恩恩  我明白了!非常感谢!!

海洋洋 Lv.2 8楼

学习一下看看

jed504 Lv.1 9楼

进来这个论坛就是好,可以学到好多东东

蓝毛象 Lv.1 10楼

我又偷学了一串代码

已显示全部内容