Excel VBA使用OLEDB连接CSV文件提示路径无效问题求助
Excel VBA 用ACE OLEDB连接CSV提示路径无效的解决方案
核心错误原因
你当前报错的根本原因是文本类文件的OLEDB连接规则要求Data Source参数仅填写CSV所在的文件夹路径,不能包含文件名,文件名需要在后续执行的SQL查询语句中指定。
具体解决步骤
- 修正连接字符串的
Data Source参数,从完整文件路径中拆分出文件夹路径填入。以你给出的路径为例,Data Source只需写D:\MyUserName\Documents\SubFolder1\SubFolder2\SubFolder3\即可。 - 调整
Extended Properties的引号写法,VBA字符串中建议用两个双引号转义代替单引号,避免字符串解析错误。 - 在SQL查询语句中指定要读取的CSV文件名,若文件名包含空格,需要用方括号
[]包裹文件名。
完整可运行代码示例
Sub ReadCSVByOLEDB() Dim conn As Object, rs As Object Dim fullPath As String, folderPath As String, fileName As String Dim connStr As String ' 此处替换为你通过FileDialog获取的完整文件路径 fullPath = "D:\MyUserName\Documents\SubFolder1\SubFolder2\SubFolder3\My Filename.csv" ' 拆分文件夹路径和文件名 folderPath = Left(fullPath, InStrRev(fullPath, "\")) fileName = Mid(fullPath, InStrRev(fullPath, "\") + 1) ' 创建ADO连接对象 Set conn = CreateObject("ADODB.Connection") ' 修正后的连接字符串 connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & folderPath & _ ";Extended Properties=""text;HDR=YES;FMT=Delimited"";" conn.Open connStr ' 查询时指定CSV文件名,带空格的文件名需加方括号 Set rs = conn.Execute("SELECT * FROM [" & fileName & "]") ' 此处添加你自己的数据处理逻辑,比如将结果写入工作表 Sheet1.Range("A1").CopyFromRecordset rs ' 释放资源 rs.Close conn.Close Set rs = Nothing Set conn = Nothing End Sub
异常排查补充
如果按上述修改后仍报错,可按以下顺序排查:
- 确认你的Office版本与ACE OLEDB驱动位数匹配,32位Office需使用32位驱动,64位Office需使用64位驱动。如果是32位环境,也可尝试将Provider替换为
Microsoft.Jet.OLEDB.4.0验证。 - 如果你的CSV文件分隔符不是默认逗号,需要在
Extended Properties中添加分隔符指定,比如用分号分隔则修改为""text;HDR=YES;FMT=Delimited(;);""。
内容的提问来源于stack exchange,提问作者SmileyFtW
相关产品推荐
相关产品推荐

