如何用Excel VBA将多行数据从Excel导入Access表末尾?
批量将Excel多行数据导入Access数据表的VBA解决方案
核心思路
直接使用Access的TransferSpreadsheet方法批量导入Excel指定区域数据,无需手动复制粘贴,完美适配多列(如56列)场景,避免逐个字段赋值的繁琐。
修改后的完整代码
Dim AccessBookFilePath As String Dim appAccess As Access.Application Dim exportSheet As Worksheet Dim lastRow As Long ' 获取Access数据库路径 AccessBookFilePath = Range("N2").Value ' 创建Access应用对象 Set appAccess = New Access.Application ' 打开目标Access数据库(修正路径分隔符为Windows标准反斜杠) appAccess.OpenCurrentDatabase "P:\Contracts\" & AccessBookFilePath ' 定位到要导出的Excel工作表 Set exportSheet = ThisWorkbook.Sheets("Data To Export") ' 获取数据区域最后非空行号 lastRow = exportSheet.Range("A" & exportSheet.Rows.Count).End(xlUp).Row ' 批量导入Excel数据到Access表 appAccess.DoCmd.TransferSpreadsheet _ TransferType:=acImport, _ SpreadsheetType:=acSpreadsheetTypeExcel12Xml, _ TableName:="Retail Contracts Monitoring", _ HasFieldNames:=True, _ Range:=exportSheet.Name & "!A2:" & exportSheet.Cells(lastRow, 56).Address ' 可选:打开Access表查看导入结果 appAccess.DoCmd.OpenTable "Retail Contracts Monitoring" appAccess.UserControl = True ' 释放对象,避免内存泄漏 Set exportSheet = Nothing Set appAccess = Nothing
关键注意事项
- 列顺序匹配:必须保证Excel数据列的顺序和Access表的字段顺序完全一致,否则会出现数据错位
- 表头参数设置:
HasFieldNames设为True时,要求Excel第1行是表头且与Access字段名对应;如果Excel第2行开始是纯数据,改为False - 路径格式修正:原代码中的
P:'Contracts是错误格式,Windows系统路径需用反斜杠\ - 抛弃低效操作:避免使用
Select和Copy这类手动交互式操作,TransferSpreadsheet是Access官方推荐的批量导入方法,稳定性和效率更高
内容的提问来源于stack exchange,提问作者shawn
相关产品推荐
相关产品推荐

