以下内容在我的计算机上可以很好地运行,但在同事的计算机上无法运行:
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”子句。谁能澄清这个错误的原因?任何想法都将受到欢迎。谢谢。
答案 0 :(得分:0)
对于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连接是否有害?