編輯:發現新錯誤?刷新QueryTable引發「一般ODBC錯誤」 - VBA Excel 2011 for Mac
我可能剛剛發現爲什麼我的腳本不能工作了。最近有一個辦公室更新,似乎他們已經實施了微軟查詢,擺脫了我安裝並根據需要配置的ODBC-Manager。現在實際的問題可能是這個微軟查詢沒有UNICODE庫,我不知道我可以把它們放在哪裏,這樣微軟的查詢就可以讀取/獲取它們。或者說,我不知道如何給微軟查詢的UNICODE庫的路徑,因爲在經理中沒有可能改變它,或者也許有,我只是沒有找到它?除此之外,我無法打開微軟查詢管理器,除非我直接從Excel工作簿中打開它。
原來的問題
此代碼工作過一段時間。現在使用完全相同的代碼,我得到一個運行時錯誤。 Here我已經在這種情況下尋求幫助,並將其啓動。
下面的代碼:
Sub ConnectSQL()
Dim connstring As String
Dim sLogin As String
Dim qt As QueryTable
sLogin = "Uid=*;Pwd=*;"
sqlstringFirma = "select * from gi_kunden.tbl_Firma"
sqlstringPerson = "select * from gi_kunden.tbl_Person"
connstring = "ODBC;DSN=KundeDB;" & sLogin
ActiveWorkbook.Sheets("Firma").Select
ActiveSheet.Range("A1:T2000").Clear
For Each qt In ActiveSheet.QueryTables
qt.Delete
Next qt
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstringFirma)
.BackgroundQuery = False
.RefreshStyle = xlOverwriteCells
.Refresh '"General ODBC error" hereeee
End With
ActiveWorkbook.Sheets("Person").Select
ActiveSheet.Range("A1:T2000").Clear
For Each qt In ActiveSheet.QueryTables
qt.Delete
Next qt
With ActiveSheet.QueryTables.Add(Connection:=connstring, Destination:=Range("A1"), Sql:=sqlstringPerson)
.BackgroundQuery = False
.RefreshStyle = xlOverwriteCells
.Refresh 'And hereee again
End With
Call Replace
ActiveWorkbook.Sheets("Firma").Select
End Sub
我沒有使用。選擇這裏兩次,我知道我應該改變它。
我在Mac上的Excel 2011中工作,所以請注意,並非所有在Windows上工作的東西都能正常工作。
*編輯*
首先:就算我把所有的對象庫激活,這仍然無法正常工作。
其次,我才意識到有些事情我打開對象瀏覽器:
「ODBCConnection」是一個聲明的類(「Excel的類ODBCConnection會員」)。但是當我在對象瀏覽器中單擊Excel時,無法找到「ODBCConnection」。如果我輸入代碼「Excel.ODBCConnection.Refresh」,則會拋出錯誤「找不到方法或數據成員」,僅突出顯示單詞「ODBCConnection」。當我僅使用ODBCConnection.Refresh(刷新是根據對象瀏覽器的ODBCConnection方法)時,會顯示相同的錯誤。
我有「QueryTable(1).Refresh」,即使它在對象瀏覽器中列出並聲明的錯誤:「變量未定義」,完全相同的問題(「Class QueryTable Member of Excel 「)。
我相信我會爲所有與此相關的事物獲得這些錯誤。
編輯
這將引發上線ActiveWorkbook.RefreshAll相同的 「通用ODBC錯誤」:
Dim strConn As String
Dim strLoginData As String
Dim QT As QueryTable
Dim strFirmSQL As String
Dim strPersSQL As String
strConn = "ODBC;DSN=KundeDB;" & strLoginData
strLoginData = "Uid=*myUid*;Pwd=*myPwd*"
strFirmSQL = "Select * From gi_kunden.tbl_firma"
strPersSQL = "Select * From gi_kunden.tbl_person"
Dim WSFirm As Worksheet
Set WSFirm = ActiveWorkbook.Sheets("Firma")
WSFirm.Range("A1:T1000").Clear
For Each QT In WSFirm.QueryTables
QT.Delete
Next QT
With WSFirm.QueryTables.Add(strConn, WSFirm.Range("A1"), strFirmSQL)
.SaveData = True
.BackgroundQuery = True
'.Refresh
End With
Dim WSPers As Worksheet
Set WSPers = ActiveWorkbook.Sheets("Person")
For Each QT In WSPers.QueryTables
QT.Delete
Next QT
With WSPers.QueryTables.Add(strConn, WSPers.Range("A1"), strPersSQL)
.SaveData = True
.BackgroundQuery = True
'.Refresh
End With
ActiveWorkbook.RefreshAll 'FAILS here
Call Replace
WSFirm.Activate
heeeeeeeeeelp>< – Kathara
我們曾經遇到過類似的問題,我可以通過聲明一個驅動程序來糾正其中的大部分問題(Teradata通常會給我帶來最大的痛苦)。我也開始避免使用DSN,因爲我有一些喜歡命名完全不同的用戶。而且,如果存在訪問問題,刷新將會失敗。 – Liss
這可能有幫助,但我注意到,strConn =「ODBC; DSN = KundeDB;」 &strLoginData在strLoginData被賦值之前出現。它看起來不像連接字符串包含登錄憑證。只是我的兩分錢! – Snachmo