
vba是在最初组织旧版评教系统时就接触过的,但一直没研究过,也没仔细看过。只知道它可以整理数据。
了解:
Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件。也可说是一种应用程式视觉化的Basic 脚本。——来自百度百科
背景:
这次使用vba是因为:这次评教最初用的外网,连的万达238的数据库,但由于服务器出现问题,及时更换了局域网,连的校内207的库。之后万达服务器恢复后,又继续用外网。即:评教的数据在两个数据库中。这样对统计成绩就造成了一定的困难。——如何对成绩进行整合??
解决:
其实在这里用vba,就相当于把excel当成数据库,对其进行 *** 作。
我是先把成绩分别导出来,也就是有两份成绩单。每一份都不完整:有可能一个老师,一部分学生给的分在1个库中,另一部分的分在另一个库。这样统计出来成绩就是这样的:
数据库1:
数据库2:
vba代码:
'作 者:赵寒-借鉴师哥旧版vba
'时 间:2016-6-19 19:52:10
'过程说明:此过程为多个库中评教数据合并专用过程。主要功能是计算某教师、某课程在多个库中学生评分
' 的平均值。
'使用说明:处理的Excel必须是直接从评教系统导出的Excel,不得更换Excel中列的顺序。且需要将多个成绩单数据放在同一个excel进行整合统计。
Sub formatting()
Dim rowCount As Integer '总行数
Dim colCount As Integer '总列数
Dim tempRowCount As Integer '临时行数
Dim tempColumnCount As Integer '临时列数
Dim arrResult(100) As String '存放临时结果
Dim strSheetName As String '存放原工作表名
Dim sheetResult As Worksheet '自定义的工作表
Dim n
第一步:连接数据库,下面是参考代码
Set conn = CreateObject("ADODBConnection")
connConnectionString = "Provider=MicrosoftAceOleDB120;Data Source=" & mypath
connConnectionString = connConnectionString & ";Jet OLEDB:Database Password=1"
connOpen
第二步:插入数据,参考代码如下:
Sql = "insert into skmxb (内部管理号,收款日期,金额"
Sql = Sql & ") values ('" & nbglH & "', #" & Format(myD, "yyyy/mm/dd") & "#,"
Sql = Sql & jE
Sql = Sql & ")"
connExecute Sql
sub click()
textbox3text=textbox1text+textbox2text
label1text="+"
end sub
以上加法运算代码,是其他运算都类似的,如有问题,欢迎提问~
sub 清除()
textbox1text=""
textbox2text=""
textbox3text=""
end sub
sub 退出()
unload me
end sub
Sub DoSql()
这个过程名叫DoSql,运行不需要任何参数
Dim cnn As Object
定义cnn 它是是一个对象
Dim rst As Object
Dim Mypath As String, Str_cnn As String, Sqlstr As String
定义了一堆字符串
Dim i As Long
定义i是长整数
Set cnn = CreateObject("adodbConnection")
简而言之创建了ADOdb连接,你可以理解为启用了一个和不同类型数据库交互的中间组件
ADOdb,就像一根吸管,各种数据库就像是奇形怪状的杯子,正常的杯子从上面的开口取水,如果是瓶颈拧成麻花的杯子可能直接就倒不出来,要特殊的倒法。取数据就像取水,ADOdb做的事情是,只要把吸管放好,就可以取水,而不必掌握不同杯子特殊的倒水方法。
Mypath = ThisWorkbookFullName
这里是给字符串Mypath赋值,让他等于vba代码所在文件的完整路径,比如这段代码放在了C盘根目录下的123xlsm里,运行之后Mypath="C:\123xlsm"
If ApplicationVersion < 12 Then
Str_cnn = "Provider=MicrosoftJetOLEDB40;Extended Properties=Excel 80;Data Source=" & Mypath
Str_cnn = provider
Else
Str_cnn = "Provider=MicrosoftACEOLEDB120;Extended Properties=Excel 120;Data Source = " & Mypath
End If
这里是在判断excel版本,不同的excel版本使用ADO的时候引擎版本不一样,所以分开设置。
如果低于office12(其实就是2007)引擎使用OLEDB40,数据源就是Mypath
给字符串Str_cnn赋值,其实就是指明了Provider和DataSource参数
Provider其实就是ADO使用的引擎
DataSource就是数据源
如果高于office12(高于office2007)
引擎使用OLEDB120,数据源还是Mypath
Str_cnn = provider我也没看懂为什么这么写。
是不是sub 前面有const provider
cnnOpen Str_cnn
连接数据库
Sqlstr = "SELECT FROM [ListInAdvance$]" '//请在此处写入你的SQL代码
Set rst = cnnExecute(Sqlstr)
执行了你的sql语句
设置rst为查询到的结果对象
CellsClearContents
清除sheet里所有内容,保留格式
For i = 0 To rstFieldsCount - 1
Cells(1, 1) = rstFields(i)Name
Next
遍历结果集,在A1单元格填上域(Field)名,但是其实只保留最后一个。(结果集)
Range("a2")CopyFromRecordset rst '
在以A2为左上角定点的区域里放上查询得出的结果集。
cnnClose
关闭ADOdb连接
Set cnn = Nothing
释放cnn对象内存
End Sub
以上就是关于excel里面宏写的vba,数据库能单独进行数据库整合嘛全部的内容,包括:excel里面宏写的vba,数据库能单独进行数据库整合嘛、EXCELvba写入ACCESS数据库表、access数据库,第3题怎样做,VBA代码是等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)