Live-Forum - Die aktuellen Beiträge
Datum
Titel
19.04.2024 12:23:24
19.04.2024 11:45:34
Anzeige
Archiv - Navigation
1728to1732
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Auswahl Tabellenblatt nach Verbindungs-Refresh

Auswahl Tabellenblatt nach Verbindungs-Refresh
12.12.2019 08:50:44
Miidas
Hallo Zusammen,
ich möchte für meinen Arbeitgeber ein Umsatz-Dashboard in Excel bauen. Das funktioniert auch soweit ganz gut.
Die Grunddaten erhalte ich aus der ERP-Software als CSV-Datei die immer Nachts automatisch exportiert wird.
Nun habe ich eine XLSM erstellt in der ich per Abfrage die Daten aus der CSV-Datei in das Tabellenblatt "Daten" schreibe.
Hier wird durch die Abfrage ja eine eigene Tabelle angelegt, auf die ich Pivottabellen verknüpft habe. Die daraus erstellten Diagramme hab ich auf ein Tabellenblatt "Dashboard" zusammengefasst.
Um immer die neuesten Daten zu laden, führe ich beim Workbook_Open() einen RefreshAll durch. Dadurch werden die neuen Daten geladen und die Pivots aktualisiert. Dies funktioniert auch! Leider springt Excel aber nach beenden des Codes immer auf das Tabellenblatt "Daten" und markiert die komplette Datentabelle der Abfrage.
Ich habe auch bereits das Tabellenblatt ausgeblendet, dann springt Excel aber ins Leere und das Tabellenblatt "Dashboard" wird erst durch anklicken wieder sichtbar. Auch ein Sheets("Dashboard").Select funktioniert nicht, hier Springt er zwar auf das Dashboard aber dann sofort wieder zurück zur Datentabelle.
Die Aktualisierung wird mit BackgroundQuery:=False durchgeführt damit auf das beenden der Abfrage gewartet wird, aber ich habe auch hier immer den gleichen Effekt.
Hab ihr eine Lösung dafür, dass wenn ich die XLSM öffne immer das Tabellenblatt "Dashboard" angezeigt wird bzw. der Focus wieder auf dieses Tabellenblatt nach der Aktualisierung zurückspringt?
Ich hoffe ihr könnt mir bei meinem Problem helfen!
mit hoffnungsvollem Gruß
Miidas

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
12.12.2019 09:04:34
Pierre
Hallo,
hast du eine "Application.ScreenUpdating = False" eingefügt?
Also:

Private Sub Workbook_Open()
Application.ScreenUpdating = False
...dein weiterer Code
Sheets("Dashboard").Select
Application.ScreenUpdating = True
Vielleicht hilft's.
Gruß Pierre
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
12.12.2019 10:12:47
Miidas
Hallo Pierre,
danke schon mal für deine Antwort.
Hab es gerade mit dem "Application.ScreenUpdating = False" probiert.
Problem bleibt aber weiterhin, nach dem RefreshAll springt er wieder ins Tabellenblatt "Daten" und markiert die Tabelle.
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
12.12.2019 10:50:25
Pierre
Eine andere Idee, obwohl diese im Prinzip nicht wirklich anders ist:

Private Sub Workbook_Open()
Dim ZurueckZu As Worksheet
Set ZurueckZu = ThisWorkbook.Worksheets("Tabelle3")
DeinCode
ZurueckZu.Activate
Am Besten auch mit ScreenUpdating umschließen.
Ansonsten würde ich dich bitten, den Code und/oder die Mappe hochzuladen.
Gruß Pierre
Anzeige
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
12.12.2019 16:49:09
Miidas
Der Effekt ist der selbe, am Schluss lande ich immer auf der Datentabelle mit den markierten Abfragedaten.
Code schaut gerade so aus:
Private Sub Workbook_Open()
Dim ZurueckZu As Worksheet
Set ZurueckZu = ThisWorkbook.Worksheets("Dashboard")
Dim ws As Worksheet
Dim lo As ListObject
Application.ScreenUpdating = False
For Each ws In Worksheets
For Each lo In ws.ListObjects
lo.QueryTable.Refresh BackgroundQuery:=False
Next lo
Next ws
Set ws = Nothing
Set lo = Nothing
Application.ScreenUpdating = True
ZurueckZu.Activate
End Sub
Bei der ganzen Sache ist mir noch eins aufgefallen, wenn ich auf einem anderen Tabellenblatt stehe, springt er auf das Blatt "Dashboard" und dann erst wieder auf das Blatt "Daten" zurück.
Es scheint fast so, als wäre das Update der QueryTable noch nicht vollständig beendet da ist der Code schon durchgelaufen. Eigtl. sollte das doch durch den BackgroundQuery:=False verhindert werden!
Die Dateien kann ich grad so nicht hochladen, ist größer als 1MB! Ich pflege mal Demodaten ein und lade sie hoch!
Noch irgendwelche anderen Ideen wie ich das Query-Update im Hintergrund hinbekommen könnte?
Anzeige
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
13.12.2019 11:07:12
Pierre
Ohne Mappe ist das natürlich schwierig zu testen, aber 2 Ideen vielleicht noch:
1. Hast du unter Daten - Verbindungen - Eigenschaften die Option "Aktualisierung im Hintergrund zulassen" deaktiviert?
2. Vielleicht unschön, aber probier mal mit "Application.Wait (Now + TimeValue("0:00:05"))" zu arbeiten.
Hinter dem Next ws einfügen.
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
13.12.2019 14:06:32
Miidas
Die Option "Aktualisierung im Hintergrund zulassen" habe ich deaktiviert. Aber auch im aktiven Zustand tritt das Problem auf.
Mit der "Application.Wait..." Methode wartet er die 5 Sekunden ab und springt dann auf die Datentabelle, das funktioniert also leider auch nicht.
Ich hab mal Demodaten eingepflegt und die Dateien hochgeladen.
https://www.herber.de/bbs/user/133756.xlsm
Anzeige
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
16.12.2019 08:41:34
Pierre
Hallo Miidas,
sorry, dass ich mich erst jetzt wieder melde.
Ich vermute, den Fehler gefunden zu haben.
Das Ende des Codes müsste so aussehen:

ZurueckZu.Activate
Application.ScreenUpdating = True
End Sub

Also erst das Blatt aktivieren und danach die Bildschirmaktualisierung wieder einschalten.
Versuche das bitte mal so.
Gruß Pierre
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
16.12.2019 11:53:19
Miidas
Kein Problem.
Ich hab es mal so ausprobiert und den Code geändert. Hat leider keinen Effekt.
Der Tabellenblattwechsel passiert immer erst wenn der Code schon durchgelaufen ist.
AW: Auswahl Tabellenblatt nach Verbindungs-Refresh
17.12.2019 14:04:05
Pierre
Bei mir funktioniert das so, er zeigt erst 5 Sekunden lang nur ein graues Fenster mit dem Rädchen (Maus) und anschließend öffnet er das Blatt Dashboard.
Was bei mir natürlich nicht funktioniert, ist, dass ich die Tabellen aktualisieren lassen kann. Da läuft der Code (logischerweise) in einen Laufzeitfehler, da die Datenbank bei mir nicht vorhanden ist.
Ist denn die Aktualisierung bei dir komplett abgeschlossen nach diesen 5 Sekunden?
Wenn nicht, dann teste mal eine längere Wartezeit. Wenn auch das nichts hilft, bin ich leider langsam echt raus.
Ich mache so lange erstmal offen.
Anzeige
eine letzte Idee
17.12.2019 14:11:58
Pierre
Nochmal ich...
Gerade habe ich noch eine Idee aufgeschnappt, aber echt die letzte:
Ändere die For Each Schleife folgendermaßen ab:

For Each ws In Worksheets
For Each lo In ws.ListObjects
BackgroundQuery:=False
lo.QueryTable.Refresh
BackgroundQuery:=True
Next lo
Next ws
Probiere das bitte mal sowohl mit als auch ohne die Zeile "Application.Wait"
AW: eine letzte Idee
17.12.2019 16:44:04
Miidas
Die Aktualisierung der Tabellen läuft bei mir problemlos durch. Die Tabelle ist danach auch richtig aktualisiert.
Auch beim Code oben ist der Effekt der gleiche, egal ob mit "Application.Wait" oder ohne!
Wie bereits gesagt, ich sehe das der Sprung auf das Tabellenblatt "Dashboard" erfolgt, danach springt aber mein Excel immer auf das Tabellenblatt mit dem ListObject und selektiert die Liste.
Ich habe es mal an einem anderen Rechner versucht. Hier passiert das gleiche!
Anzeige
AW: eine letzte Idee
18.12.2019 08:59:57
Pierre
Ich kann das wirklich nicht nachvollziehen, vielleicht auch einfach nur, weil ich wie geschrieben die Akutalisierung nicht ausführen kann, wie sie bei dir stattfindet.
Ich bin da leider jetzt raus, stelle offen, damit hoffentlich jemand anderes eine Lösung suchen kann.
Gruß Pierre
AW: eine letzte Idee
18.12.2019 15:37:05
Miidas
Hallo Pierre, ich verstehe das auch nicht so recht warum nach dem Refresh der Focus immer auf das aktualisierte ListObject springt. Ich habe mal folgenden Code auspropiert:
Private Sub Workbook_test()
Dim ZurueckZu As Worksheet
Set ZurueckZu = ThisWorkbook.Worksheets("Dashboard")
Dim ws As Worksheet
Dim lo As ListObject
Application.ScreenUpdating = False
For Each ws In Worksheets
For Each lo In ws.ListObjects
lo.QueryTable.Refresh BackgroundQuery:=False
Next lo
Next ws
ActiveWorkbook.RefreshAll
'Application.Wait (Now + TimeValue("0:00:05"))
Set ws = Nothing
Set lo = Nothing
For Each ws In Worksheets
For Each lo In ws.ListObjects
lo.Unlist
Next lo
Next ws
Application.ScreenUpdating = True
ZurueckZu.Activate
End Sub
Hier springt er nicht mehr und bleibt auf dem Blatt "Dashboard", der Code ist aber natürlich nur einmal ausführbar da dann ja die Abfrage und die Pivots die Verbindung verlieren.
Vlt. hat ja noch jemand anderes eine Idee!
Bei dir möchte ich mich an dieser Stelle jedenfalls mal bedanken für deine Hilfe und Engagement!
Gruß Miidas
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige