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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage