【问题标题】:Microsoft Excel ODBC Excel 2016 - how to fix?Microsoft Excel ODBC Excel 2016 - 如何修复?
【发布时间】:2022-07-06 15:00:50
【问题描述】:

我继承了一个在 Excel 2013 中运行良好的 Excel 宏(文件以 XLS 格式保存,并且似乎使用 32 位 ODBC Microsoft Excel 驱动程序),尝试在 Excel 2016 中运行相同的宏时出现以下错误它似乎使用 64 位 Excel 驱动程序。

[Microsoft][ODBC Driver Manager] 未找到数据源名称且未指定默认驱动程序。

失败的代码如下,它特别突出了“With cn”部分中的“.Open”。考虑为新的 Excel 重新配置它?

Function ReportGroup(strSQL33 As String) As Recordset
    Dim ocmd As Command
    Set ocmd = New Command
    Dim ors As ADODB.Recordset
    Dim r As Long
    Dim intIndx As Long
    Dim cn As ADODB.Connection
    Dim strFile As String
    strFile = ThisWorkbook.Path & "\" & ThisWorkbook.Name & ";"
    Set ors = Nothing
    Set cn = Nothing
    Set cn = New ADODB.Connection
    Set ors = New Recordset
    'The connection
    With cn
        .Provider = "MSDASQL"
        .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
        "DBQ=" & strFile & "; ReadOnly=False;"
        .Open
    End With
    With ocmd
      .CommandText = strSQL33
      .CommandType = adCmdText
      .ActiveConnection = cn
      Set ors = .Execute
    End With
    Set ReportGroup = ors
End Function

【问题讨论】:

  • 如果您的观察是正确的,您可能需要安装相应的 64 位 ODBC 驱动程序(在 Windows 级别上)并改用它。是否有任何理由通过 ODBC 而不是作为 xls 工作簿打开/连接到其他 xls 文件?
  • 澄清一下,Excel 2013 正在与我运行 Excel 2016 的计算机不同的计算机上运行。 Excel 2013 副本的操作系统是 Windows Server 2008 R2,Excel 2016 副本的操作系统是 Windows 10。
  • 当我在 Excel 中使用 ODBC(例如,作为通过 PowerQuery 的连接)并共享此 Excel 文件以在另一台计算机上运行时,我必须确保存在具有相同“凭据”的 ODBC 连接可用另一台电脑也是如此。此外,ODBC 驱动程序必须与 Excel 匹配(32 位与 64 位;例如,我在 Windows PC 上针对不同的应用程序进行了两种设置)。但是,如果您使用 ODBC 连接到另一个 Excel 文件,则可以选择不使用 ODBC 进行连接。使用 PowerQuery 更改源没有问题。对于您的 VBA 代码,您可能需要对其进行测试。
  • @Anonymous 感谢 cmets - 这个文件只是连接到自身,有一个数据库格式的数据选项卡被汇总到另一个选项卡中,程序员显然使用 Excel ODBC SQL 作为一种方式总结数据。
  • 也许您可以尝试通过 ODBC 数据源管理器在 32 位和 64 位版本中通过 DSN 设置与该 xls 文件的连接来进行测试(选择 DSN 后应该有 ODBC Microsoft Excel 作为可用条目)。设置后尝试在另一个 Excel 文件中使用它们进行连接。如果它工作正常,那么应该不是驱动问题,但可能需要调整代码中的连接字符串?

标签: excel odbc


【解决方案1】:

查看@Anonymous 的建议后,我使用外部连接向我展示了一个连接字符串。执行我的宏时,这没有出错,并且似乎已经正确处理了 SQL。

With cn
    .ConnectionString = "DSN=Excel Files;" & _
    "DBQ=" & strFile & "DriverId=1046; ReadOnly=False;"
    .Open
End With

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-22
    • 2016-01-10
    • 1970-01-01
    • 2020-07-08
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多