我知道两个方法。1、如果百EXCEL数据不多可以用这个方度法。workbooks.open(“路径")打开EXC" />
乔山办公网我们一直在努力
您的位置:乔山办公网 > excel表格制作 > vb怎么批量将<em>excel</em>文件导入到<em>access</e

vb怎么批量将<em>excel</em>文件导入到<em>access</e

作者:乔山办公网日期:

返回目录:excel表格制作




我知道两个方法。
1、如果EXCEL数据不多可以用这个方法。workbooks.open(“路径")打开EXCEL,再逐个的用INSERT语句导入到ACCESS里面。
2、就是EXCEL本身也是一个数据库,第一行是字段,用连接数据库的方式连接EXCEL直接一条SQL导入到SQL。这对格式有点要求,就是第一行必须是字段,数据比较整齐
不知道VB和VBA有什么差别啊
以下是我学习VBA的代码,看看吧
Public Sub 将数据e5a48de588b6e799bee5baa6e79fa5e98193338库记录数据全部导入到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

Option Explicit

Dim data As New ADODB.Connection

Dim db As New ADODB.Recordset

Dim xlsApp As Excel.Application

Dim xlsBook As Excel.Workbook

Dim xlsSheet As Excel.Worksheet


Private Sub Command1_Click()

On Error GoTo ErrHandler

CommonDialog1.DialogTitle = "Open files"

CommonDialog1.Filter = "mdb files(*.mdb)|*.mdb"

CommonDialog1.Flags = 4  '取消 “以只读方式打开” 复选框

CommonDialog1.ShowOpen

CommonDialog1.CancelError = True

If Len(CommonDialog1.FileName) <= 4 Then

    Exit Sub

Else

    Text1.Text = CommonDialog1.FileName

End If


ErrHandler:

    Exit Sub

End Sub


Private Sub Command2_Click()

Dim NoExistF As New FileSystemObject

Dim i, j, k As Double

'Excel行e79fa5e98193e78988e69d83361i 列j,从第二行开始,去掉标题行

i = 2

j = 1

k = 1  'Access列号,第0列留着放主键


If NoExistF.FileExists(Text1.Text) = False Or NoExistF.FileExists(Text2.Text) = False Then

    MsgBox "文件不存在!", 16, "错误提示"

    Exit Sub

Else

    '打开Access数据库

    data.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Text1.Text & ";Persist Security Info=False"

    db.Open "select * From sheet", data, adOpenKeyset, adLockOptimistic  '数据库表的名字sheet

    '打开Excel数据表

    Set xlsApp = CreateObject("Excel.Application")   '创建EXCEL对象

    Set xlsBook = xlsApp.Workbooks.Open(Text2.Text)  '打开已经存在的EXCEL工件簿文件

    Set xlsSheet = xlsBook.Worksheets("Sheet1")      '设置活动工作表

    Do

        If xlsSheet.Cells(i, j) = "" Then    '姓名=空 的时候,结束循环

            Exit Do

        End If

        db.AddNew

        db.Fields(k) = xlsSheet.Cells(i, j)

        db.Fields(k + 1) = xlsSheet.Cells(i, j + 1)

        db.Fields(k + 2) = xlsSheet.Cells(i, j + 2)

        db.MoveNext

        i = i + 1

    Loop

End If

db.MovePrevious

db.Update

db.Close

data.Close

MsgBox "数据传输完毕!", , "提示"

Set xlsSheet = Nothing

xlsBook.Close

Set xlsBook = Nothing

xlsApp.Quit

Set xlsApp = Nothing

End Sub


Private Sub Command3_Click()

On Error GoTo ErrHandler

CommonDialog1.DialogTitle = "Open files"

CommonDialog1.Filter = "xls files(*.xls)|*.xls"

CommonDialog1.Flags = 4  '取消 “以只读方式打开” 复选框

CommonDialog1.ShowOpen

CommonDialog1.CancelError = True

If Len(CommonDialog1.FileName) <= 4 Then

    Exit Sub

Else

    Text2.Text = CommonDialog1.FileName

End If


ErrHandler:

    Exit Sub

End Sub


Private Sub Form_Load()

Text1.Text = ""

Text2.Text = ""

End Sub

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网