Clever-Excel-Forum

Normale Version: Warten bis ODBC Verbindung aktualisiert wurde (VBA)
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich habe eine ODBC Verbindung welche ca. 1 Minute zum aktualisieren dauert. Nun springt Excel im Makro zu schnell weiter zum nächsten Punkt.
Es soll hier aber so lange warten bis tatsächlich alle Daten aktualisiert wurden.

Ich habe ein bisschen recherchiert und bin hier auf eine mögliche Lösung gestoßen:

https://stackoverflow.com/questions/2208...nishes-vba

Code:
'~~> your code here before refresh
Activeworkbook.RefreshAll
DoEvents
'~~> rest of your code here after refresh

Ich würde es lieber so wie in einem anderen Beispiel das hier angegeben wurde lösen:

Code:
Sub Refresh_All_Data_Connections()

   For Each objConnection In ThisWorkbook.Connections
       'Get current background-refresh value
       bBackground = objConnection.OLEDBConnection.BackgroundQuery

       'Temporarily disable background-refresh
       objConnection.OLEDBConnection.BackgroundQuery = False

       'Refresh this connection
       objConnection.Refresh

       'Set background-refresh value back to original value
       objConnection.OLEDBConnection.BackgroundQuery = bBackground
   Next

   MsgBox "Finished refreshing all data connections"

End Sub

Hier springt das Makro einfach bei diesem Schritt weiter und lässt den ganzen unteren Block aus:

For Each objConnection In ThisWorkbook.Connections

Irgendjemand hat dann hier kommentiert:

Code:
This worked for me, but using ODBCConnection instead of OLEDB. – Dan Nov 20 '14 at 16:05

Das habe ich auch versucht, aber irgendetwas mache ich noch falsch.

Hat hier jemand einen Tipp / Hinweis wie ich das von einer OLEDB auf eine ODBC Verbindung umstellen kann?
Für mich sieht es so aus als würde das Problem bereits hier liegen, als würde VBA hier die ODBC Verbindung nicht als objConnection erkennen.

For Each objConnection In ThisWorkbook.Connections
Danke und lg
Olli
Hallo,

probier' doch mal folgendes:

Unter Daten gibt's den Knopf Verbindungen, der eine Liste der existierenden Aufragen hervorzaubern sollte. Dort kann man unter "Eigenschaften" die Option "Aktualisierung im Hintergrund zulassen" deaktivieren.

Vielleicht hilfts ...

vg, MM
Hallo MM,

das habe ich jetzt überall einmal gemacht. Erste Tests schauen schon einmal recht vielversprechend aus.
Vielen Dank für den Tipp.

Hat eventuell trotzdem jemand noch eine Idee wie ich die Verbindungen über VBA ansprechen kann?

Danke und lg

Olli
Hallo,

meine Theorie ist, das das asynchrone Verhalten nichts mit dem VBA zu tun hat, sondern mit der Einstellung in der Datenbankverknüpfung. Also ist .RefreshAll nach wie vor richtig.

Ich hoffe, dass meine Theorie richtig ist ...

Was das Ansprechen einzelner Verbindungen betriff: der Code den du da veröffentlicht hast, ist ein vielversprechender Einstieg. Allerdings ist da scheinbar noch ein wenig Recherche und Bastelei erforderlich, da es unterschiedliche Arten von Verknüpfungen zu geben scheint. Leider fehlt mir hierfür jegliches Material, dass ich untersuchen könnte (meine Excel-Dateien haben halt keine Connections ...). Sorry.

vg, MM