ich möchte per VBA eine bestehende Datenverbindung zu einer (My-)SQL-Datenbank aktualisieren und dabei per VBA insbes. die SQL-Abfrage ändern. Ziel ist, nur die jeweils gerade relevanten Daten (für meine darauf aufbauenden Pivottabellen) aus SQL in den Excel-Cache zu ziehen, und eben nicht alle Daten (mehr als 100 Gb), wie mein Excel dies standardmäßig tut.
Per Macrorecorder erhält man folgendes:
With ActiveWorkbook.Connections("Meine_SQL_Abfrage").ODBCConnection
.BackgroundQuery = False
.CommandText = Array("Select ... from ... where ... ab hier dynamisch via VBA zu befüllen")
.CommandType = xlCmdSql
.Connection = Verbindungsdaten zu meiner SQL-Datenbank
.RefreshOnFileOpen = False
.SavePassword = True
.SourceConnectionFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
With ActiveWorkbook.Connections("Meine_SQL_Abfrage")
.Name = "Meine_SQL_Abfrage"
.Description = "Datenabfrage"
End With
ActiveWorkbook.Connections("Meine_SQL_Abfrage").Refresh
Sieht für mich eigentlich vernünftig aus, aber leider aktualisiert dieses Macro beim Ausführen nicht die existierende Abfrage ("Meine_SQL_Abfrage"), sondern erzeugt bei jedem Ausführen stets eine neue Abfrage, die jeweils nur "Verbindung" (in einem deutschen Excel) heißt. Alle Pivots nutzen dann diese neue Abfrage, statt die alte.
Was mache ich falsch? Natürlich könnte ich versuchen, im Nachgang die alte Verbindung zu löschen und die neue umzubenennen, aber erstens muss ich dann ermitteln, wie die neue "Verbindung" in anderen Sprachen heißt und zweitens fühlt sich das nicht sonderlich elegant an.
Powerpivot unterstützt meine IT übrigens nicht.
Vielen Dank für einen Tipp,
Marko