技术实现原理
Connection
和Recordset
对象操作数据。完整VBA代码示例
Sub ImportExcelToAccess() Dim conn As Object Dim rs As Object Dim ws As Worksheet Dim lastRow As Long Dim dbPath As String Dim tableName As String Dim i As Long ' 设置参数 dbPath = "C:DatabaseYourDatabase.accdb" ' 修改为实际路径 tableName = "YourTableName" ' 修改为目标表名 Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为工作表名 ' 获取最后一行数据 lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' 创建ADO连接 Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";" ' 打开目标表 Set rs = CreateObject("ADODB.Recordset") rs.Open tableName, conn, 1, 3 ' adOpenKeyset, adLockOptimistic ' 逐行导入数据 For i = 2 To lastRow ' 假设第一行是标题 rs.AddNew rs("Field1") = ws.Cells(i, 1).Value ' 字段名与列号对应 rs("Field2") = ws.Cells(i, 2).Value rs("Field3") = ws.Cells(i, 3).Value rs.Update Next i ' 释放资源 rs.Close conn.Close Set rs = Nothing Set conn = Nothing MsgBox "数据导入完成!共导入 " & lastRow - 1 & " 条记录。" End Sub
关键注意事项
YYYY-MM-DD
On Error Resume Next
跳过错误行If Not IsEmpty(ws.Cells(i,1)) Then
判断空值进阶优化方案
' 使用SQL语句批量插入 strSQL = "INSERT INTO " & tableName & " (Field1, Field2) VALUES ('" & ws.Cells(i,1) & "','" & ws.Cells(i,2) & "')" conn.Execute strSQL
For Each fld In rs.Fields ws.Cells(1, fld.OrdinalPosition + 1) = fld.Name Next fld
UserForm1.ProgressBar1.Value = (i / lastRow) * 100 DoEvents
常见问题排查
Provider
名称是否正确引用说明:ADO对象模型参考自Microsoft Developer Network文档;连接字符串语法遵循OLE DB标准;最佳实践部分整合自Stack Overflow技术社区案例。