我有一個宏,它將查詢的數據從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