excel - Excel 添加查询方法
问题描述
以下在我的计算机上运行良好,但在同事的计算机上失败:
GetUserName = Environ$("username")
If GetUserName = "user1" Then
o_dsn = """dsn=mydbs"""
Else
o_dsn = """dsn=dbs2"""
End If
ActiveWorkbook.Queries.Add Name:="Query1", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Source = Odbc.Query(" & o_dsn & ", ""Select InvoiceNo, EffectDate from " & _
"batchcontract " & _
"where InvoiceNo in( " & _
RangeToString & _
") """ & _
")" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " Source" & _
""
他的机器因“Queries.Add”语句中的“对象不支持属性或方法”错误而失败。我们都在 Windows 10 上运行 Office 365 ProPlus,并使用相同的 Excel 引用。虽然我们的 DSN 带有不同的标签,但它们都指向同一个 MySQL DB,在 ODBC 定义中保存了凭据并通过了连接测试。
我不确定 Excel 是否反对“Queries.Add”方法或“Odbc.Query”子句。谁能澄清这个错误的原因?任何想法都会受到欢迎。谢谢。
解决方案
使用 ODBC,连接的名称似乎很重要。另一方面,我发现你真正需要的只是 DSN,它会根据你设置连接的方式拉回任何连接细节。
也就是说,你似乎已经在你的 if/then 中处理了这个问题。
我从未以您列出的方式使用查询——我总是将它们作为工作集中的表来执行。本着这种精神,这是我如何通过 VBA 添加表格的快速而肮脏的样板。这本质上是执行此答案中列出的操作的 VBA 方式:
https://stackoverflow.com/a/51444029/1278553
试试这个——在两台机器上——看看它们是否都可以使用分别命名的 DNS。
Dim lo As ListObject
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
Set lo = ws.ListObjects.Add(SourceType:=0, _
Source:=Array(Array("ODBC;DSN=mydbs")), _
Destination:=Range("A1"))
lo.QueryTable.CommandText = "select foo from bar"
lo.Refresh
另外,添加具有匹配名称的 ODBC 连接有什么害处吗?
推荐阅读
- angular - 从事件对象获取元素的背景图像:Angular 2
- r - 将 geom_text 接地到 x 轴(例如 y =0)
- javascript - 使用 GA 跟踪 amp 页面的事件
- reactjs - 如何设置组件之间的数据传输?
- twig - 树枝文件的@component(来自.blade)的版本是什么?
- javascript - 如何在点击时更改提交值
- python - 重命名文件夹中的文件,要重命名的文件在excel表中
- c++ - Xapian - 搜索查询不检索任何匹配项,除非在每个单词中添加了 '"'
- python - scipy hermite 多项式列表在用作 lambda 函数时表现异常
- cypress - 如何在赛普拉斯中返回文档的尺寸以供以后测试使用