Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zeitgesteuert aktualisieren und speichern

Forumthread: Zeitgesteuert aktualisieren und speichern

Zeitgesteuert aktualisieren und speichern
17.10.2016 14:34:53
Alesandro
Liebe Community,
ich möchte jeden Tag morgens um 04:30 eine Arbeitsmappe mit DB-Verbindungen aktualisieren und mit dem selben Namen speichern.
Zum Öffnen der Arbeitsmappe habe ich in der Aufgabenplanung einen Task eingerichtet.
Ich habe mir gedacht, dass ich mittels Workbook_Open um 04:31 (eine Minute nach Öffnen der Arbeitsmappe) die Aktualisierung der DB-Verbindung aufrufe und 10 min später speichere und schließe.
Hier mein nicht funktionierender Code:

Private Sub Workbook_Open()
Application.OnTime TimeValue("04:31:00"), "DB_Verbindungen_aktualisieren"
Application.OnTime Now + TimeValue("00:10:00"), "Shutdown"
End Sub
Sub DB_Verbindungen_aktualisieren()
ActiveWorkbook.RefreshAll
End Sub Sub Shutdown()
ThisWorkbook.Close savechanges:=True
End Sub

Wichtig ist, dass das Makro beim Öffnen während des Tages nicht ausgelöst werden darf.
Daher die Idee mit:
Application.OnTime TimeValue("04:31:00"), "DB_Verbindungen_aktualisieren"
Vielleicht kann mir eine "Gute Seele" helfen das hinzubekommen.
Vielen Dank
lg Alesandro
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 15:20:01
ChrisL
Hi Alesandro
Sofern zwischen 0.00 und 4.30 Uhr niemand arbeitet, würde ich einfach nur das Datum der Aktualisierung speichern. Das Hilfsblatt kannst du ausblenden.
Private Sub Workbook_Open()
With Worksheets("Hilfsblatt").Range("A1")
If Not .Value = Date Then
.Value = Date
Call Verbindungen_aktualisieren
End If
End With
End Sub
Sub DB_Verbindungen_aktualisieren()
ThisWorkbook.RefreshAll
ThisWorkbook.Close savechanges:=True
End Sub
cu
Chris
Anzeige
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 15:50:08
Alesandro
Servus Chris,
habe den Code in "Diese Arbeitsmappe" eingefügt und anschliessend über die Aufgabenplanung das File geöffnet.
Es wird jedoch nur das Datum in die Zelle A1 der Hilfstabelle geschrieben.
Ich habe bei Call ausgebessert auf DB_Verbindungen_aktualisieren.
Das hat leider nicht geholfen.
Kannst du bitte nochmals drüberschaun.
Danke,
lg Alesandro
Anzeige
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 15:53:26
ChrisL
Hi Alesandro
Wenn das Tagesdatum einmal in der Zelle steht, dann wird der Code nicht mehr ausgeführt resp. erst wieder am nächsten Tag. Also einfach nochmal das Datum in A1 löschen.
cu
Chris
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 15:56:10
Alesandro
Servus,
ich habe das Datum aus A1 gelöscht.
Funzt aber net :-(
lg Alesandro
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 16:11:00
ChrisL
Hi
Teste mal mit...
Sub DB_Verbindungen_aktualisieren()
MsgBox "Hallo"
End Sub
Kommt beim Öffnen ein Hallo oder nicht?
cu
Chris
Anzeige
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 16:19:18
ChrisL
Falls nein:
Poste noch einmal deinen aktuellen Code.
Falls ja:
Vielleicht wird gespeichert bevor Refresh vollständig durchgeführt wurde. Evtl. hilft:
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 16:36:20
Alesandro
Hi,
mit Application.CalculateUntilAsyncQueriesDone
funktioniert es.
Vielen Dank.
lg Alesandro
Anzeige
AW: Zeitgesteuert aktualisieren und speichern
17.10.2016 17:51:25
ChrisL
Hi Alesandro
Werde mal bitte etwas deutlicher.
Funktioniert der Call Aufruf oder nicht? (=Test mit der MsgBox)
Wie sieht dein Code nun aus? abgesehen von meinem Flüchtigkeitsfehler nichts abgeändert?
RefreshAll ohne den Rest funktioniert? (=in einem separaten Makro testen)
cu
Chris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zeitgesteuert aktualisieren und speichern in Excel


Schritt-für-Schritt-Anleitung

  1. Aufgabenplanung einrichten: Erstelle einen neuen Task im Aufgabenplaner, der deine Excel-Datei täglich um 04:30 Uhr öffnet.

  2. Code in "Diese Arbeitsmappe" einfügen: Öffne die Arbeitsmappe und drücke ALT + F11, um den VBA-Editor zu öffnen. Füge den folgenden Code in das Modul „Diese Arbeitsmappe“ ein:

    Private Sub Workbook_Open()
       Application.OnTime TimeValue("04:31:00"), "DB_Verbindungen_aktualisieren"
       Application.OnTime Now + TimeValue("00:10:00"), "Shutdown"
    End Sub
    
    Sub DB_Verbindungen_aktualisieren()
       ActiveWorkbook.RefreshAll
       Application.CalculateUntilAsyncQueriesDone
    End Sub
    
    Sub Shutdown()
       ThisWorkbook.Close savechanges:=True
    End Sub
  3. Hilfsblatt für das Datum erstellen: Füge ein Hilfsblatt in deine Arbeitsmappe ein und nutze es, um das Datum der letzten Aktualisierung zu speichern.

  4. Datum überprüfen: Überprüfe im Code, ob das aktuelle Datum von dem in Zelle A1 des Hilfsblattes abweicht. Wenn ja, rufe die Funktion zur Aktualisierung auf.

    Private Sub Workbook_Open()
       With Worksheets("Hilfsblatt").Range("A1")
           If Not .Value = Date Then
               .Value = Date
               Call DB_Verbindungen_aktualisieren
           End If
       End With
    End Sub
  5. Testen: Teste den Code durch das Öffnen der Arbeitsmappe und achte darauf, ob die Aktualisierung wie gewünscht erfolgt.


Häufige Fehler und Lösungen

  • Datum wird nicht aktualisiert: Stelle sicher, dass das Datum in Zelle A1 gelöscht wird, bevor du die Datei erneut öffnest. Ansonsten wird der Code nicht mehr ausgeführt.

  • Makro funktioniert nicht: Wenn beim Öffnen der Arbeitsmappe keine Nachricht (MsgBox) erscheint, könnte das Makro nicht korrekt aufgerufen werden. Teste den Aufruf mit einer einfachen Meldung:

    Sub DB_Verbindungen_aktualisieren()
       MsgBox "Hallo"
    End Sub
  • Aktualisierung vor dem Speichern: Vergewissere dich, dass die Aktualisierung abgeschlossen ist, bevor die Arbeitsmappe gespeichert wird. Verwende Application.CalculateUntilAsyncQueriesDone, um sicherzustellen, dass alle Abfragen bearbeitet wurden.


Alternative Methoden

  • Verwendung von Power Query: Anstatt VBA zu verwenden, kannst du auch Power Query nutzen, um Daten aus verschiedenen Quellen zu importieren und zu aktualisieren. Dies kann besonders nützlich sein, wenn du eine Excel-Tabelle für die Aufgabenplanung verwendest.

  • Makros in separaten Modulen: Lagere häufig verwendete Funktionen in separate Module aus. Dadurch wird der Code übersichtlicher und leichter wartbar.


Praktische Beispiele

  1. DB-Verbindungen aktualisieren: Stelle sicher, dass deine DB-Verbindungen in der Excel-Tabelle richtig konfiguriert sind, sodass ActiveWorkbook.RefreshAll die gewünschten Daten aktualisiert.

  2. Verwendung des Aufgabenplaners: Nutze den Aufgabenplaner in Windows, um sicherzustellen, dass deine Excel-Datei genau zur richtigen Zeit geöffnet wird. Achte darauf, dass der Task mit den richtigen Berechtigungen ausgeführt wird.


Tipps für Profis

  • Testumgebung einrichten: Teste deine Makros in einer sicheren Umgebung, bevor du sie in einer Produktionsdatei verwendest. So vermeidest du unerwartete Fehler.

  • Dokumentation des Codes: Kommentiere deinen Code ausreichend, um die Funktionsweise zu erklären. Dies hilft dir und anderen Benutzern, den Code besser zu verstehen.

  • Regelmäßige Backups: Mache regelmäßig Backups deiner Excel-Dateien, insbesondere wenn du mit VBA arbeitest, um Datenverlust zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die Aktualisierung funktioniert?
Füge eine MsgBox in die Funktion DB_Verbindungen_aktualisieren ein, um zu überprüfen, ob der Code ausgeführt wird.

2. Was mache ich, wenn die Excel-Datei nicht gespeichert wird?
Überprüfe, ob die Aktualisierung der Daten vollständig abgeschlossen ist, bevor du die Datei schließt. Verwende dafür Application.CalculateUntilAsyncQueriesDone.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige