ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: coollexcel

[求助] 如何利用VBA解决学生综合素质评价问题

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-24 12:22 | 显示全部楼层
duquancai 发表于 2020-5-23 19:52
写完一个又写一个,不是为学习,而是为了帮你完成工作

我也关注你给其他人回帖,你也是这么回的。这是对伸手党的痛恨吧,谁愿意做伸手党啊,谁愿意别别人骂啊。学校的教师有几个人懂代码的,能编写函数公式已经很不错了,更何况学校也养不起代码高手,所以请高手请放过我。愿意帮助的,就看一看,帮一帮;不愿意帮助的,看看就算了,就让这个帖子沉下去。我相信好心人还是很多的。

TA的精华主题

TA的得分主题

发表于 2020-5-24 12:30 | 显示全部楼层
Sub 学生汇总()
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    p = ThisWorkbook.Path & "\student\"
    sh = Dir(p & "*.xls")
     Do While sh <> ""
        Sql = Sql & "select * from [" & p & sh & "].[a1:j] union all "
        sh = Dir
     Loop
    Sql1 = Left(Sql, Len(Sql) - 10)
    Sql = "select 序号,学籍号,性别,班级,姓名,学业水平,身心健康,艺术素养,社会实践 from (" & Sql1 & ") where 评价类型='自评'"
    Sheets("自评").Range("a2").CopyFromRecordset cnn.Execute(Sql)
    Sql = "select 序号,学籍号,性别,班级,姓名,学业水平,身心健康,艺术素养,社会实践 from (" & Sql1 & ") where 评价类型='互评'"
    Sheets("互评").Range("a2").CopyFromRecordset cnn.Execute(Sql)
    cnn.Close
    Set cnn = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-24 12:43 | 显示全部楼层
donghui2363 发表于 2020-5-24 12:30
Sub 学生汇总()
Set cnn = CreateObject("ADODB.Connection")
cnn.Open "Provider=Microsoft.ACE.OLEDB.1 ...

谢谢!模拟数据很成功。下午去学校收集学生的电子表,汇总一下。能否把教师汇总也弄一下。

TA的精华主题

TA的得分主题

发表于 2020-5-24 12:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub 老师()
Dim cnn As New ADODB.Connection
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    p = ThisWorkbook.Path & "\teacher\"
    sh = Dir(p & "*.xls")
     Do While sh <> ""
        Sql = Sql & "select * from [" & p & sh & "].[a1:j] union all "
        sh = Dir
     Loop
    Sql = Left(Sql, Len(Sql) - 10)
    Sql = "select 序号,学籍号,性别,班级,姓名,学业水平,身心健康,艺术素养,社会实践 from (" & Sql & ") where 评价类型='教师评'"
    Sheets("教师评").Range("a2").CopyFromRecordset cnn.Execute(Sql)
    cnn.Close
    Set cnn = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-24 13:06 | 显示全部楼层
microyip 发表于 2020-5-24 08:10
又注册新号,重新免费定制开发?

大师,你看了您的一些帖子,您帮助了不少人。我也知道,谁也不喜欢伸手党。但您这样说,有意思吗?一个论坛注册几个号干嘛啊。伸手党们有时候也没有办法啊。我得到了帮助,我也会给我们的同仁们分享,让他们操作便捷啊。我干嘛冒着被大家骂的风险去注册一个小号,去做伸手党,去挨骂?我有插件可以搞定合并,我有函数公式去统计。我何苦到这里求助,被您说呢?还不是为了我的同仁们方便吗?大神们不屑一顾,还有小神们,好心人总是有的。所以,大神,请放过我。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-5-24 13:24 | 显示全部楼层
donghui2363 发表于 2020-5-24 12:55
Sub 老师()
Dim cnn As New ADODB.Connection
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Pr ...

老师汇总的没有验证成功,显示“用户定义类型未定义”

TA的精华主题

TA的得分主题

发表于 2020-5-24 13:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-5-24 13:49 | 显示全部楼层
其实大家初学vba都是从伸手党过来的,只不过是大神们比我们先伸手。我不觉得伸手党有啥不好,至少也是在寻求一种解决问题的办法。office是一个实用型软件,尤其是VBA,只有见识到他的威力了才有更大的兴趣去学习。这次是你们说的伸手党,下次可能就照着代码改程序......从无到有不是一蹴而就的。

TA的精华主题

TA的得分主题

发表于 2020-5-24 14:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
写了民主评议表合并、汇总,别的可以仿照自己写

民主评议汇总.rar

32.52 KB, 下载次数: 7

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-5-24 15:43 | 显示全部楼层
'顶老师一下吧,这里以 学籍号 为唯一值判断。
Option Explicit
Sub StudentAndTeacher() '学生数 或 老师数 不可超过 49 人,多了 不中!!!
Dim Cn As Object, d As Object, p$, f$, s$(2), t$(2), ar, br, i&, j&, k&, y&
For i = 1 To Sheets.Count
    Sheets(i).UsedRange.Offset(1).ClearContents
Next
Set Cn = CreateObject("ADODB.Connection")
Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
s(0) = "SELECT 序号,学籍号,性别,班级,姓名,学业水平,身心健康,艺术素养,社会实践,评价类型"
p = ThisWorkbook.Path & "\student\"
f = Dir(p & "*.xls*")
Do While f <> ""
   s(1) = s(1) & " UNION ALL SELECT * FROM [" & p & f & "].[$A1:J]"
   f = Dir
Loop
s(2) = Mid(s(1), 11)
s(1) = s(0) & " FROM (" & s(2) & ") WHERE 评价类型='自评' ORDER BY 学籍号"
With Sheets("自评")
    .Range("A2").CopyFromRecordset Cn.Execute(s(1))
    t(0) = " FROM [" & .Name & "$A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row & "] GROUP BY 学籍号"
    t(0) = "SELECT 学籍号,AVG(学业水平)*0.1,AVG(身心健康)*0.1,AVG(艺术素养)*0.1,AVG(社会实践)*0.1" & t(0)
    br = .Range("A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row)
End With
s(1) = s(0) & " FROM (" & s(2) & ") WHERE 评价类型='互评' ORDER BY 学籍号"
With Sheets("互评")
    .Range("A2").CopyFromRecordset Cn.Execute(s(1))
    t(1) = " FROM [" & .Name & "$A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row & "] GROUP BY 学籍号"
    t(1) = "SELECT 学籍号,AVG(学业水平)*0.5,AVG(身心健康)*0.5,AVG(艺术素养)*0.5,AVG(社会实践)*0.5" & t(1)
End With
s(1) = ""
p = ThisWorkbook.Path & "\teacher\"
f = Dir(p & "*.xls*")
Do While f <> ""
   s(1) = s(1) & " UNION ALL SELECT * FROM [" & p & f & "].[$A1:J]"
   f = Dir
Loop
s(2) = Mid(s(1), 11)
s(1) = s(0) & " FROM (" & s(2) & ") WHERE 评价类型='教师评' ORDER BY 学籍号"
With Sheets("教师评")
    .Range("A2").CopyFromRecordset Cn.Execute(s(1))
    t(2) = " FROM [" & .Name & "$A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row & "] GROUP BY 学籍号"
    t(2) = "SELECT 学籍号,AVG(学业水平)*0.4,AVG(身心健康)*0.4,AVG(艺术素养)*0.4,AVG(社会实践)*0.4" & t(2)
    s(1) = "SELECT DISTINCT 学籍号,性别,班级,姓名 FROM [" & .Name & "$A1:E" & .Cells(Rows.Count, 3).End(xlUp).Row & "] ORDER BY 学籍号"
End With
Set d = CreateObject("Scripting.Dictionary")
With Sheets("民主评议汇总")
    .Range("B2").CopyFromRecordset Cn.Execute(s(1))
    ar = .Range("A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row)
    For i = 2 To UBound(ar)
        d(CStr(ar(i, 2))) = i
    Next
    For k = 0 To UBound(t)
        br = Cn.Execute(t(k)).GetRows
        For j = 0 To UBound(br, 2)
            If d.Exists(CStr(br(0, j))) Then
                y = d(CStr(br(0, j)))
                For i = 1 To 4
                    ar(y, i + 5) = ar(y, i + 5) + br(i, j)
                Next
            End If
        Next
    Next
    .Range("A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row) = ar
End With
Cn.Close
Set Cn = Nothing
Set d = Nothing
End Sub

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 15:29 , Processed in 0.041364 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表