You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行时错误'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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:22:47