Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Warten bis ODBC Verbindung aktualisiert wurde (VBA)
#1
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
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Antworten Top
#2
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
Antworten Top
#3
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
WIN 10 64-Bit Pro / EXCEL Microsoft Office 365 ProPlus 64-Bit
Antworten Top
#4
Rainbow 
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste