运行时错误'31519':无法导入文件,Access VBA代码问题排查
问题分析与修正方案
核心错误:方法用错了
DoCmd.TransferText是专门用来导入文本类文件(比如CSV、TXT)的,你要导入的是XLSX格式的Excel文件,用这个方法肯定报错,这就是调试器指向该语句的原因。导入Excel文件必须用DoCmd.TransferSpreadsheet方法。
其他需要注意的细节
- 你的
report_path只写了"C:\Users\",这路径不完整,必须补充到具体的文件夹(比如"C:\Users\YourName\Documents\"),否则Dir找不到目标文件。 Dir加了vbDirectory参数,可能会返回文件夹名称,需要过滤掉,避免尝试导入文件夹。- 表名要符合Access的命名规则,不能有特殊字符、空格(如果有空格要处理,或者用方括号括起来)。
修正后的完整代码
Public Function import_data_files() Dim report_path As String, file_name As String Dim full_file_path As String ' 补充完整的目标文件夹路径 report_path = "C:\Users\你的用户名\目标文件夹\" ' 只获取XLSX文件,去掉vbDirectory参数避免返回文件夹 file_name = Dir(report_path & "*.xlsx") Do While file_name <> vbNullString full_file_path = report_path & file_name ' 用TransferSpreadsheet导入Excel文件 DoCmd.TransferSpreadsheet _ TransferType:=acImport, _ SpreadsheetType:=acSpreadsheetTypeExcel12Xml, ' 适配XLSX格式 TableName:=Trim(Replace(file_name, ".xlsx", "")), _ FileName:=full_file_path, _ HasFieldNames:=True ' 第一行作为字段名 file_name = Dir Loop MsgBox "Data files imported.", vbInformation End Function
代码参数说明
acSpreadsheetTypeExcel12Xml:指定导入XLSX格式文件,若为旧版XLS格式,换成acSpreadsheetTypeExcel9即可。HasFieldNames:=True:表示Excel文件第一行是字段名,Access会将其作为表的字段名;若没有字段名,改为False。TableName:用去掉后缀的文件名作为Access表名,确保文件名无Access禁止的特殊字符(如斜杠、问号等)。
内容的提问来源于stack exchange,提问作者annac1992
相关产品推荐
相关产品推荐

