Anzeige
Archiv - Navigation
1900to1904
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

Makros beenden sich nicht .

Makros beenden sich nicht .
29.09.2022 11:12:14
Bernd_
Hallo Zusammen,
stehe vor einem anscheinend unlösbaren Problem.
Ich arbeite mit mehreren Excel Dateien die alle 30 Minuten Tabelle1 und Tabelle 2 kopieren und in einem Ordner als xlsx Datei ablegen.
Jede Datei liegt auf einem separaten Rechner.
Das funktioniert auch ohne Probleme wenn man keine zweite Excel Datei auf hat.
Wenn ich also eine andere Excel Datei geöffnet habe und öffne dann eine mit dem Makro copyData und schließe die Datei mit dem Makro copyData wieder,öffnet diese sich ein paar Sekunden wieder.
Es scheint mir als würde das Makro nicht richtig beendet.
Unten stehende Prozeduren habe ich bereits eingebaut. Funktioniert aber nicht, Finde aber keinen Fehler.
Würde mich über Hilfe sehr freuen.
Das Makro copyData in einem Modul:

Sub copyData()
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Worksheets(Array("Tabelle1", "Tabelle2")).Copy
Rows("1:3").Select
With Selection.Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A1:AC1089").Value = Range("A1:AC1089").Value
Range("C25").Select
ActiveWorkbook.SaveAs Filename:="\\PfadXXXXXXXXXXXXXXXXXXXXX\", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close 0
Application.OnTime Now() + TimeValue("00:30:00"), "copyData"
Application.CalculateFull
Application.EnableEvents = True
End Sub
In DieseArbeitsmappe:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=CloseTime, Procedure:="copyData", Schedule:=False
End Sub
In einem Modul

Option Explicit
Public CloseTime As Date

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makros beenden sich nicht .
29.09.2022 11:31:33
Daniel
Hi
Du hast vergessen, im Hauptmakro die Variable CloseTime zu befüllen, damit passt der Zeitwert beim Schließen nicht.
Damit du den Aufruf zurücknehmen kannst, müssen ja Makroname und Zeit gleich sein, daher beim Aufruf so vorgehen:

CloseTime = Now() + TimeValue("00:30:00")
Application.OnTime EarliestTime:=CloseTime, Procedure:="copyData"
Es mag zwar funktionieren, weil Excel bei manchen Befehlen wartet bis die Makros beendet sind, aber logischerweise solle das Workbook.Close immer der letzte Befehl sein, wenn das Makro die eigene Datei schließen will
Gruß Daniel
Anzeige
AW: Makros beenden sich nicht .
29.09.2022 13:18:25
Excel_Frischling_Bernd
Hallo und erstmal danke für die Antworten.
Ich habe es jetzt so geändert. Geht aber immer noch auf .

In einem Modul
Sub copyData()
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Worksheets(Array("Tabelle1", "Tabelle2")).Copy
Rows("1:3").Select
With Selection.Interior
.PatternColorIndex = xlAutomatic
.Color = 255
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Range("A1:AC1089").Value = Range("A1:AC1089").Value
Range("C25").Select
ActiveWorkbook.SaveAs Filename:="\\PfadXXXXXXXXXXXXXXXXXXXXX\", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close 0
Application.OnTime Now() + TimeValue("00:30:00"), "copyData"
CloseTime = Now() + TimeValue("00:30:00")
Application.OnTime Now() + TimeValue("00:30:00"), "copyData"
Application.CalculateFull
Application.EnableEvents = True
End Sub
In DieseArbeitsmappe
Private Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Application.OnTime EarliestTime:=CloseTime, Procedure:="copyData", Schedule:=False
End Sub

Anzeige
AW: Makros beenden sich nicht .
29.09.2022 14:17:12
Daniel
ja, weil du das Makro 2x aufrufst.
dann müsstest du es auch 2x zurücknehmen.
einmal aufrufen reicht.
und du solltest beim Aufrufen ebenfalls die schon die Variable mit der Zeit verwenden (CloseTime), dann bist du sicher, dass es auch die gleiche Zeit ist.
es ist zwar sehr unwahrscheinlich, aber nicht völlig ausgeschlossen, dass zwischen:
CloseTime = Now() + TimeValue("00:30:00")
und
Application.OnTime Now() + TimeValue("00:30:00"), "copyData"
das Now() die Sekunde wechselt und dann hättest du zwei unterschiedliche Zeiten für Aufruf und Rückruf. Wie gesagt, das ist sehr unwahrscheinlich, aber konsequenterweise besser so
CloseTime = Now() + TimeValue("00:30:00")
Application.OnTime CloseTime, "copyData"
sollte man sich sowieso angewöhnene, dass man, wenn man eine Variable verwendet, diese Variable einmalig zuweist und dann immer diese Variable verwendet anstatt den harten Wert.
und wie schon gesagt, das Application.Ontime nur 1x ausführen, nicht 2x
Gruß Daniel
Anzeige
AW: wie sollten sie ...?du
29.09.2022 11:37:58
EtoPHG
Hallo Bernd,
Du definierst zwar eine Variable CloseTime, aber du setzt nie einen Wert für diese. Darum muss es in der copyData Prozedur so heissen:

CloseTime = Now() + TimeValue("00:30:00")
Application.OnTime CloseTime, "copyData"
Gruess Hansueli
AW: Makros beenden sich nicht .
29.09.2022 14:00:57
Bernd_
Hallo,
danke für den Link. Leider habe ich wirklich keine Ahnung davon. Habe den Code jetzt schon in viele geändert. Leider geht die DAtei immer noch auf.
Gruß Bernd
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige