VBA中ODBC连接报错:数据源名称未找到且无默认驱动指定
这个报错我太熟了——本质就是你的系统找不到连接字符串里指定的MySQL ODBC驱动,或者驱动的配置/版本和Excel不匹配。下面给你一步步排查解决的办法:
1. 先确认MySQL ODBC驱动是否真的安装了
打开Windows的「ODBC数据源管理器」,这里要注意Excel的位数:
- 如果你用的是32位Excel,要打开C:\Windows\SysWOW64\odbcad32.exe
- 64位Excel则打开C:\Windows\System32\odbcad32.exe
切换到「驱动程序」标签页,找有没有MySQL ODBC 5.1 Driver这一项。如果没有,直接去MySQL官网下载对应版本的驱动安装即可。
2. 必须保证驱动位数和Excel位数完全匹配
这是90%的人踩的坑!比如你装了64位Excel,却装了32位的MySQL ODBC驱动,系统肯定找不到驱动。
怎么看Excel位数?打开Excel→「文件」→「账户」→「关于Excel」,里面会明确标注是32位还是64位,然后下载对应位数的驱动重新安装。
3. 修正连接字符串的细节问题
看你代码里的连接字符串,有几个容易忽略的错误点:
uid= myus...这里的空格要去掉!账号前面不能有多余空格,改成Uid=yourusername;- 驱动名称必须和系统里的完全一致,比如如果你装的是新版本驱动(比如8.0),就得把
{MySQL ODBC 5.1 Driver}改成{MySQL ODBC 8.0 Unicode Driver}(Unicode版本支持更多字符,推荐使用) - 给你一个标准的正确连接字符串示例:
oConn.Open "Driver={MySQL ODBC 8.0 Unicode Driver};" & _ "Server=myserveraddress;" & _ "Database=mydatabasename;" & _ "Uid=yourusername;" & _ "Pwd=yourpassword;"
4. 备选方案:用DSN连接更省心
如果直接写驱动还是有问题,你可以创建一个系统DSN:
- 打开对应位数的ODBC数据源管理器
- 切换到「系统DSN」标签页,点击「添加」
- 选择你的MySQL驱动,跟着向导配置服务器地址、数据库名、账号密码,测试连接成功后保存DSN名称
- 连接字符串可以简化成:
oConn.Open "DSN=YourDSNName;Uid=yourusername;Pwd=yourpassword;"
这种方式不容易出错,因为DSN已经帮你把驱动和服务器信息配置好了。
最后给你的代码加个小优化:尽量避免用Sheets("176Tk").Select,直接引用工作表更高效,而且记得用完连接后关闭释放对象:
Sub Macro176() Dim ws As Worksheet Dim i As Integer Dim oConn As Object Dim rs As Object ' 直接引用工作表,不用Select Set ws = ThisWorkbook.Sheets("176Tk") i = 17 Set oConn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") ' 替换成你修正后的连接字符串 oConn.Open "Driver={MySQL ODBC 5.1 Driver};" & _ "Server=myserveraddress;" & _ "Database=mydatabasename;" & _ "Uid=yourusername;" & _ "Pwd=yourpassword;" ' 这里写你的记录集操作逻辑,比如rs.Open "SELECT * FROM yourtable", oConn ' ... ' 用完记得关闭释放资源 If Not rs Is Nothing Then rs.Close Set rs = Nothing End If If Not oConn Is Nothing Then oConn.Close Set oConn = Nothing End If End Sub
内容的提问来源于stack exchange,提问作者Manish Shiwlani




