Refresh QueryTable löst "General ODBC error" aus - VBA Excel 2011 für Mac
EDIT: Neuer Fehler gefunden?
Ich habe vielleicht gerade herausgefunden, warum mein Skript nicht mehr funktioniert. Vor kurzem gab es ein Office-Update und es scheint, dass die Microsoft-Abfrage implementiert wurde, mit der der ODBC-Manager, den ich installiert und entsprechend meinen Anforderungen konfiguriert habe, entfernt wird. Das eigentliche Problem könnte nun sein, dass diese Microsoft-Abfrage nicht über die UNICODE-Bibliothek verfügt und ich nicht weiß, wo ich sie ablegen kann, damit die Microsoft-Abfrage sie lesen / abrufen kann. Oder besser gesagt, ich weiß nicht, wie ich der Microsoft-Abfrage den Pfad zur UNICODE-Bibliothek geben soll, da es im Manager keine Möglichkeit gibt, ihn zu ändern, oder vielleicht gibt es eine und ich habe ihn einfach nicht gefunden? Außerdem kann ich den Microsoft Query Manager nur öffnen, wenn ich ihn direkt aus der Excel-Arbeitsmappe öffne.
URSPRÜNGLICHE FRAGE
Dieser Code hat einige Zeit funktioniert. Jetzt mit genau dem gleichen Code bekomme ich einen Laufzeitfehler.Hie Ich habe in diesem Fall bereits um Hilfe gebeten und es funktioniert.
Hier ist der Code:
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
Ich habe .Select hier zweimal verwendet und ich weiß, ich sollte es ändern.
Ich arbeite in Excel 2011 auf einem Mac. Denken Sie also daran, dass nicht alles, was unter Windows funktioniert, funktioniert.
* EDIT *
Zunächst: Auch wenn ich alle Objektbibliotheken aktiviert habe, funktioniert dies immer noch nicht.
weitens habe ich gerade einige Dinge bemerkt, als ich den Objektbrowser geöffnet habe:
"ODBCConnection" ist eine deklarierte Klasse ("Class ODBCConnection Member of Excel"). Aber wenn ich im Objekt-Browser auf Excel klicke, ist "ODBCConnection" nirgends zu finden. Wenn ich den Code "Excel.ODBCConnection.Refresh" eingebe, wird der Fehler "Methode oder Datenelement nicht gefunden" ausgegeben und nur das Wort "ODBCConnection" hervorgehoben. Der gleiche Fehler wird angezeigt, wenn ich nur ODBCConnection.Refresh verwende (Refresh ist eine Methode von ODBCConnection gemäß dem Object Browser).
Ich habe genau das gleiche Problem mit "QueryTable (1) .Refresh", das den Fehler auslöst: "Variable nicht definiert", obwohl sie im Objekt-Browser aufgelistet und deklariert ist ("Class QueryTable Member of Excel").
Ich glaube, ich würde diese Art von Fehlern für all die Dinge bekommen, die damit verbunden sind.
BEARBEITE
Dies wirft den gleichen "General ODBC error" in der Zeile ActiveWorkbook.RefreshAll:
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