不知道VB和VBA有什么差别啊
以下是我学习VBA的代码,看看吧
Public Sub 将数据库记录数据全部导入到excel工作表ADO之一()
Dim myData As String, myTable As String, SQL As String
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer
'清除工作表的全部数据
ActiveSheet.Cells.Clear
myData = ThisWorkbook.Path & "\学生成绩管理.mdb" '指定数据库
myTable = "期末成绩" '指定数据表
'建立与数据库的连接
Set cnn = New ADODB.Connection
With cnn
.Provider = "microsoft.jet.oledb.4.0"
.Open myData
End With
'查询数据表
SQL = "select * from " & myTable & " order by 性别"
Set rs = New ADODB.Recordset
rs.Open SQL, cnn, adOpenKeyset, adLockOptimistic
'显示查询结果
MsgBox "数据库中的记录数为:" & rs.RecordCount
'复制记录数据
If rs.RecordCount > 0 Then
'复制字段名
For i = 1 To rs.Fields.Count
Cells(1, i) = rs.Fields(i - 1).Name
Next i
'设置字段名字体为加粗并居中对齐
With Range(Cells(1, 1), Cells(1, rs.Fields.Count))
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
'复制全部数据
Range("A2").CopyFromRecordset rs
'设置工作表格式
ActiveSheet.Cells.Font.Size = 10
ActiveSheet.Columns.AutoFit
End If
'关闭记录集及数据库连接,并释放变量
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
'·recordset对象的copyfromrecordset方法:
'用于将一个ADO或DAO的recordset对象的内容复制到工作表中,复制的起始位置在指定区域的左上角。
' 语法:expression.copyfromrecordset(data,maxrows,maxcolumns)
'expression表示一个工作表的range对象;
'data为必需参数,指定复制到指定区域的recordset对象;
'maxrows(可选):指定复制到工作表的记录个数上限,省略为复制所有记录;
'maxcolumns(可选):指定复制到工作表的字段个数上限,省略将复制对象的所有字段
'copyfromrecordset方法只是复制记录集的记录数据,并不复制字段名,下列语句用fields集合的count属性获取字段总数,在循环中利用field对象的name属性获取字段名。
'For i = 1 To rs.Fields.Count
' Cells(1, i) = rs.Fields(i - 1).Name
'Next i
'复制的记录是从当前行开始的内容,复制完成之后,recordset对象的EOF属性值为True,因此在复制recordset对象内容后,如要重新浏览记录集的话,需使用rs.movefirst将记录指针移到第一条记录。
'·SQL语句:
'sqlect 字段列表 from 子句(表名)where 条件 group by 性别(分组) having avg(工资总额)>5000 (与group by 一起用) order by 姓名 asc(升序)/desc(降序)
End Sub
' 引用:microsoft activeX data objects 2.x library
Public Sub 将数据库记录数据全部导入到excel工作表ADO之二()
Dim myData As String, myTable As String, SQL As String
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer
ActiveSheet.Cells.Clear '清除工作表的全部数据
myData = ThisWorkbook.Path & "\学生成绩管理.mdb" '指定数据库
myTable = "期末成绩" '指定数据表
'建立与数据库的连接
Set cnn = New ADODB.Connection
With cnn
.Provider = "microsoft.jet.oledb.4.0"
.Open myData
End With
'查询数据表
SQL = "select * from " & myTable & " order by 数学"
Set rs = cnn.Execute(SQL)
'复制记录数据
If rs.EOF And rs.BOF Then
MsgBox "数据表中没有记录!", vbCritical
Else
'复制字段名
For i = 1 To rs.Fields.Count
Cells(1, i) = rs.Fields(i - 1).Name
Next i
'设置字段名字体为加粗并居中对齐
With Range(Cells(1, 1), Cells(1, rs.Fields.Count))
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
'复制全部数据
Range("A2").CopyFromRecordset rs
'设置工作表格式
ActiveSheet.Cells.Font.Size = 10
ActiveSheet.Columns.AutoFit
End If
'关闭记录集及数据库连接,并释放变量
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
End Sub
' 引用:microsoft activex data objects 2.x library
Public Sub 将数据库记录数据全部导入到Excel工作表ADO之三()
Dim myData As String, myTable As String
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim i As Integer
ActiveSheet.Cells.Clear '清除工作表的全部数据
myData = ThisWorkbook.Path & "\学生成绩管理.mdb" '指定数据库
myTable = "期末成绩" '指定数据表
'建立与数据库的连接
Set cnn = New ADODB.Connection
With cnn
.Provider = "microsoft.jet.oledb.4.0"
.Open myData
End With
'查询数据表
Set rs = New ADODB.Recordset
rs.Open myTable, cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
'显示查询结果
MsgBox "数据库中的记录数为:" & rs.RecordCount
' 复制记录数据
If rs.RecordCount > 0 Then
'复制字段名
For i = 1 To rs.Fields.Count
Cells(1, i) = rs.Fields(i - 1).Name
Next i
With Range(Cells(1, 1), Cells(1, rs.Fields.Count))
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
'复制全部数据
Range("A2").CopyFromRecordset rs
'设置工作表格式
ActiveSheet.Cells.Font.Size = 10
ActiveSheet.Columns.AutoFit
End If
'关闭记录集及数据库连接,并释放变量
rs.Close
cnn.Close
Set rs = Nothing
Set cnn = Nothing
'·注 之一1与之三的 区别:
'实例3-1中语句rs.open sql,cnn,adopenkeyset,adlockoptimistic和实例3-3中语句rs.open mytable,cnn,adopenkeyset,adlockoptimistic,adcmdtabledirect的区别:前者使用了sql语句来实现对数据表的查询,因此可以实现各种条件下的查询;而后者则使用数据表名来实现对数据表的查询,得到的数据是整个数据表,且无法对记录排序,除此之外两者的代码完全相同。
End Sub
' 引用:microsoft dao 3.6 object library
Public Sub 将数据库记录数据全部导入到Excel工作表DAO之一()
Dim myData As String, myTable As String, SQL As String
Dim myDb As DAO.Database
Dim myRs As DAO.Recordset
Dim i As Integer
ActiveSheet.Cells.Clear '清除工作表的全部数据
myData = ThisWorkbook.Path & "\学生成绩管理.mdb" '指定数据库
myTable = "期末成绩" '指定数据表
'建立与数据库的连接
Set myDb = OpenDatabase(myData)
'查询数据表
SQL = "select * from " & myTable & " order by 数学"
Set myRs = myDb.OpenRecordset(SQL)
'显示查询结果
MsgBox "数据库中的记录数为:" & myRs.RecordCount
'复制记录数据
If myRs.RecordCount > 0 Then
'复制字段名
For i = 1 To myRs.Fields.Count
Cells(1, i) = myRs.Fields(i - 1).Name
Next i
'设置字段名字体为加粗并居中对齐
With Range(Cells(1, 1), Cells(1, myRs.Fields.Count))
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
'复制全部数据
Range("A2").CopyFromRecordset myRs
'设置工作表格式
ActiveSheet.Cells.Font.Size = 10
ActiveSheet.Columns.AutoFit
End If
'关闭记录集及数据库连接,并释放变量
myRs.Close
myDb.Close
Set myRs = Nothing
Set myDb = Nothing
' ·DAO创建查询记录集要使用DAO.database对象的openrecordset方法?
'语法:set recordset=database.openrecordset(source,type,options,lockedits)
'databaseo为新建立的dao.database对象变量;
'source是记录集的数据源,可以是该数据库对象对应数据库的表名,也可以是SQL查询语句;
'type:指定新建的recordset对象的类型;
'options:指定新建的recordset对象的一些特性;
'lockedits: 控制对记录的锁定
'例: Set myRs = myDb.OpenRecordset(SQL)
End Sub
Public Sub 将数据库记录数据全部导入到Excel工作表DAO之二()
Dim myData As String, myTable As String
Dim myDb As DAO.Database
Dim myRs As DAO.Recordset
Dim i As Integer
ActiveSheet.Cells.Clear '清除工作表的全部数据
myData = ThisWorkbook.Path & "\职工管理.mdb" '指定数据库
myTable = "职工基本信息" '指定数据表
'建立与数据库的连接
Set myDb = OpenDatabase(myData)
'查询数据表
Set myRs = myDb.OpenRecordset(myTable)
'显示查询结果
MsgBox "数据库中的记录数为:" & myRs.RecordCount
'复制记录数据
If myRs.RecordCount > 0 Then
'复制字段名
For i = 1 To myRs.Fields.Count
Cells(1, i) = myRs.Fields(i - 1).Name
Next i
'设置字段名字体为加粗并居中对齐
With Range(Cells(1, 1), Cells(1, myRs.Fields.Count))
.Font.Bold = True
.HorizontalAlignment = xlCenter
End With
'复制全部数据
Range("A2").CopyFromRecordset myRs
'设置工作表格式
ActiveSheet.Cells.Font.Size = 10
ActiveSheet.Columns.AutoFit
End If
'关闭记录集及数据库连接,并释放变更
myRs.Close
myDb.Close
Set myRs = Nothing
Set myDb = Nothing
'·区别:
'之一使用SQL语句,而之二使用数据表来实现查询,其他相同。
End Sub
温馨提示:内容为网友见解,仅供参考