本文于2023年8月23日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!
内容提要
- Excel数据导入Access数据库
大家好,我是冷水泡茶,今天群里有人问Excel是否能导入Access数据库的问题,这当然是可以的,在我的【财务管理系统】中,就有数据导入的功能:
可以选择多个表一次性导入Access数据库,当然,前提是这些表的名称、结构都完全相同。
我也曾经发过一篇文章【Excel VBA Excel表格数据导入Access数据库/数据校验初探】,主要谈导入数据的校验问题。
今天我们就来详细捋一捋Excel导入Access的操作:
基本过程
1、首先,我们创建两个文件,一个叫access数据库,一个叫excel数据源,再创建一个启用宏的Excel工作簿“Excel数据导入Access.xlsm”。
2、准备点数据,就从我的【财务管理系统】测试数据中选一张表“tb凭证”,记账凭证表。
3、在“Access数据库.accdb”中创建一张表,名字与数据源保持一致,当然不一致也没有关系,我们在导入的时候直接指定表名就可以。之所以有“保持一致”的要求,是因为在我的【财务管理系统】中,是批量循环导入的,其中导入代码的数据表名是一个变量,是不直接指定的,我们选中哪个就相应导入哪个。我们要建立一个“tb凭证”表,方便起见,直接复制【财务管理系统】中表的结构。
4、在“Excel数据导入Access”中编写导入代码。
5、执行代码,成功导入:
程序代码
1、模块1,DataImport过程,导入数据:
Sub DataImport()
DimconnAsObject
Dim strCnn As String
Dim rs As Object
Dim dataFile As String, excelFile As String
Dim strSQL As String
DimarrData()
Dim i As Integer, j As Integer
Set conn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
'把Excel数据通过查询读入数组
excelFile = ThisWorkbook.Path & "/Excel数据源.xlsx"
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & excelFile & ";Extended Properties=""Excel 12.0 Xml;HDR=YES"";"
strSQL = "SELECT * FROM [tb凭证$]"
rs.Open strSQL, conn, 3, 3
arrData = rs.GetRows
rs.Close
conn.Close
'打开Access数据库连接,把数组数据导入tb凭证表
dataFile = ThisWorkbook.Path & "/Access数据库.accdb"
strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dataFile & ";"
conn.Open strCnn
rs.Open "tb凭证", conn, 1, 3
For i = 0 To UBound(arrData, 2)
If arrData(1, i) = "" Then Exit For
rs.AddNew
For j = 1 To UBound(arrData, 1)
rs.Fields(j) = arrData(j, i)
Next
rs.Update
Next
'关闭并清空对象
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
EndSub
代码解析:
(1)定义一些变量,conn数据库连接对象,rs记录集对象。
(2)line13~19,把Excel表数据读入数组:
(a)conn.open~:建立与excel文件的连接;
(b)rs.open~:打开记录集;
(c)arrData = rs.GetRows把记录集对象数据存入数组。
(3)line21~32,把数组中的数据写入记录集对象,并更新。记录集、数组的下标都是从0开始,在写入记录集的时候,我们从j=1开始,目的是跳过第一个自动更新字段ID。
(4)最后,关闭conn、rs对象。
2、其他过程:CmdImport,数据导入命令按钮
Private Sub CmdImport_Click()
Call DataImport
EndSub
3、注意事项:
(1)要求导入的数据表与目标数据表的结构、数据类型要保持一致,否则可能导入失败。
(2)这三张表是放在同一个目录下,如果改变路径,可在代码中修改excelFile 、dataFile的值。
(3)Excel数据导入Access,还有其他的方法,时间关系,我们不做展开,等以后用到的时候再说。最简单的,我们可以把Excel表中的数据复制,粘贴到Access表中。
~~~~~~End~~~~~~
喜欢就点个赞、点在看、留个言呗!分享一下更给力!感谢!