我有一个宏,它将查询的数据从SQL导出到Excel中的查询表中。整个过程通过一个宏来完成,并且它已经建立了一个ODBC连接。由于连接已经建立,基本上我所做的只是更新宏中的命令字符串中的一些数据,然后刷新它。当我在电脑上运行它时,一切正常;但是它被同一网络上的多个人使用。尽管与查询相关的宏最终对每个人都适用,但除我之外的所有用户都获得了“选择数据源”和用户名/密码提示。如何绕过“选择数据源”提示查询表w/VBA
有没有办法让我可以设置宏执行,以便所有的用户都可以运行它而不需要那些提示,也不必在他们的机器上设置ODBC数据源?我一直在寻找几个小时来看看其他人如何能够绕过这个提示(例如How to disable the "Select Data source window in VBA"),但是我找到的东西并没有为我工作。
下面是如何连接字符串连接当前设置:
"DSN=RTP;UID=J4;Trusted_Connection=Yes;APP=Microsoft Office 2010;WSID=123;DATABASE=C;"
这里是我的宏目前的样子:
Sub Vols_L()
Application.ScreenUpdating = False
Dim cn As WorkbookConnection
Dim odbcCn As ODBCConnection, oledbCn As OLEDBConnection
Set cn = ActiveWorkbook.Connections("Vols_L")
Set ws = Sheets("Setup")
Set ws6 = Sheets("L Graph")
Set ws7 = Sheets("Queries")
Dim Query As String
Dim SSD As String
Dim SED As String
Dim PM As String
Dim AD As String
Dim ID As String
Query = ws7.Range("Vols_L_Query")
SSD = ws.Range("SSD").Value
SED = ws.Range("SED").Value
PM = ws.Range("FOM_PM").Value
AD = ws.Range("AD").Value
ID = ws.Range("ID").Value
Query = Replace(Query, "#SD", SSD)
Query = Replace(Query, "#ED", SED)
Query = Replace(Query, "#PM", PM)
Query = Replace(Query, "#AD", AD)
Query = Replace(Query, "#ID", ID)
Updates the workbook Connection Depending on Type
With cn
If .Type = xlConnectionTypeODBC Then
Set odbcCn = cn.ODBCConnection
odbcCn.CommandText = Query
odbcCn.Refresh
ElseIf cn.Type = xlConnectionTypeOLEDB Then
Set oledbCn = cn.OLEDBConnection
oledbCn.CommandText = "Query"
oledbCn.Refresh
End If
End With
Application.ScreenUpdating = True
End Sub
编辑:所以我有很大的问题是,我显然很愚蠢。我非常感谢你的帮助,但我已经尝试了下面的回复中提到的所有不同方法,并且无法让他们为我工作。我试着输入UpdateWorkbookConnection查询到一个我前面粘贴(它取代一切后评论“更新工作簿连接取决于类型”),因此它看起来像:
UpdateWorkbookConnection ActiveWorkbook.Connections("Vols_L"), Query, "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=C;Data Source=RTP;"
当我这样做,虽然,我得到在您的宏点的错误,说:
".OLEDBConnection.Connection = ConnectionString"
也许您可以使用不同的连接字符串,该连接字符串不需要在每台计算机上预先配置ODBC连接。 – Chuck