Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1232to1236
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

1 Sekunde vor Monatswechsel Makro ausführen

1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo liebe Experten.
Ich möchte gerne dieses Makro

Private Sub Monat()
On Error Resume Next
ThisWorkbook.Sheets.Copy
ActiveWorkbook.SaveAs Filename:= _
"C:\Test\Milchdispo" & Format(Date, "_yyyy-mm-dd"), FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close
End Sub
jeweils am Monatsende resp. kurz vor Mitternacht vollautomatisch ausführen lassen.
Momentan habe ich folgenden code zum ausführen des Makros jeweils am 1. im Monat:

Sub OnTimeStarten()
'Application.OnTime TimeValue("15:16:00"), "NeuerMonat"
Application.OnTime Date + 1 + TimeSerial(0, 0, 1), "Monat"
End Sub
Sub OnTimeAbbrechen()
On Error Resume Next
'Application.OnTime TimeValue("15:16:00"), "NeuerMonat", False
Application.OnTime Date + 1 + TimeSerial(0, 0, 1), "Monat", False
End Sub
Das Problem ist dass es mir die Datei nun im Format Milchdispo_2011-11-01.xls abspeichert. aber es sollte das datum vom letzten Tag des vorherigen Monats schreiben, also Milchdispo_2011-10-31.xls oder noch besser: Milchdispo_Oktober_2011
Aber wie kann ich es im Datumsformat vom letzten Monat abspeichern wenn das Makro am 1. des neuen Monats ausgeführt wird?
Liebe Grüsse
Sascha

36
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Thomas3
Hallo Sascha,
warum liest du nicht das Tagesdatum vorher in eine Variable aus, ziehst ein Tag ab, nennst das zum Beispiel "Alter_Monat" und schreibst dannn
Activeworkbook.SaveAs Filename:= "C:\Test\"Milchdispo" & Alter_Monat ~
Vielleicht geht das ?
Grüße
Thomas
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Thomas,
Danke für die Antwort.
Ja stimmt... So funktionierts auch :-)) *freu*
Ist mir nicht in Sinn gekommen....
Danke und liebe Grüsse
Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Habs hingekriegt... Das "-1" fehlte...
Sorry für die Störung
Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
habe auch an einer Lösung gearbeitet.

Sub OnTimeStarten()
Dim nDate As Date
nDate = DateSerial(Year(Date), Month(Date) + 1, 1) - TimeSerial(0, 0, 1)
Application.OnTime nDate, "'Monat " & Day(nDate) & "," & Month(nDate) & "," & Year(nDate) & "'"
End Sub

Sub OnTimeAbbrechen()
Dim nDate As Date
nDate = DateSerial(Year(Date), Month(Date) + 1, 1) - TimeSerial(0, 0, 1)
On Error Resume Next
Application.OnTime nDate, "'Monat " & Day(nDate) & "," & Month(nDate) & "," & Year(nDate) & "'", Schedule:=False
End Sub

Sub Monat(iTag%, iMonat%, iJahr%)
Dim nDate As Date
On Error Resume Next

nDate = DateSerial(iJahr, iMonat, iTag)
ThisWorkbook.Sheets.Copy

ActiveWorkbook.SaveAs Filename:= _
"C:\Test\Milchdispo" & Format(nDate, "_yyyy-mmmm-dd"), FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
 
ActiveWorkbook.Close
End Sub
Gruß Tino
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Tino
Funktioniert perfekt :-))
Der abgespeicherte Monat soll ja als Sicherung desselben Monats dienen. Nun habe ich in meiner Mappe in der Zelle G1 mittels Formel das Jetzige Datum drin. Wenn ich nun die Mappe des gespeicherten letzten Monats öffne, wird diese Zelle natürlich aktualisiert.
Wie kann ich im Code sagen, dass diese Zelle den Monat des abgespeicherten Datums übernimmt, so dass wenn ich sie in einem halben Jahr öffne, auch den richtigen Monat anzeigt?
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
Du könntest den Wert vor dem kopieren der Tabelle in einer Variablen Merken und in die kopie einfügen.
Beispiel nicht getestet:

Sub Monat(iTag%, iMonat%, iJahr%)
Dim nDate As Date, varValue
On Error Resume Next
'Tabelle und Zelle anpassen
varValue = ThisWorkbook.Sheets("Tabelle1").range("A2").value
nDate = DateSerial(iJahr, iMonat, iTag)
ThisWorkbook.Sheets.Copy
'Tabelle und Zelle anpassen
ActiveWorkbook.Sheets("Tabelle1").range("A2").value = varValue
ActiveWorkbook.SaveAs Filename:= _
"C:\Test\Milchdispo" & Format(nDate, "_yyyy-mmmm-dd"), FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close
End Sub
Den Namen der Tabelle und die Zelle müsstest Du natürlich anpassen.
Gruß Tino
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Tino, hab es jetzt recht lange getestet. Es funktioniert eigentlich schon, aber:
wird der Code ausgeführt bekomme ich ein fenster "datei existiert schon, überschrieben?"
obwohl diese Datei noch nicht existiert!! Der Ordner ist leer... warum kommt dann dieser Fehler?
Gruss Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
warum die Meldung bei Dir kommt kann ich jetzt auch nicht sagen.
Kannst die Meldung aber so unterdrücken.
Für testzwecke kannst mal das On Error Resume Next abstellen.

Sub Monat(iTag%, iMonat%, iJahr%)
Dim nDate As Date, varValue
'On Error Resume Next
'Tabelle und Zelle anpassen
varValue = ThisWorkbook.Sheets("Tabelle1").Range("A2").Value
nDate = DateSerial(iJahr, iMonat, iTag)
ThisWorkbook.Sheets.Copy
With ActiveWorkbook
'Tabelle und Zelle anpassen
.Sheets("Tabelle1").Range("A2").Value = varValue
Application.DisplayAlerts = False 'Meldung unterdrücken
.SaveAs Filename:= _
"C:\Test\Milchdispo" & Format(nDate, "_yyyy-mmmm-dd"), FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True 'Meldung nicht mehr unterdrücken
.Close
End With
End Sub
Gruß Tino
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Tino,
Vielen Dank für Deine Antworten.
Ich gebe auf.
Es funktioniert nicht richtig.
Auch der Monatsname übernimmts nicht richtig. Weiss nicht ob es evtl am XL 2000 liegt.
Bin schon seit mehreren Tagen an diesem Problem. Lese mich durch alle gefundenen Foren aber finde keine Lösung. Bin langsam "Müde" davon und mag nicht mehr.
Trotzdem recht herzlichen Dank für Deine grosse Mühe.
Liebe Grüsse
Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
vielleicht kannst Du mal Dein Projekt hochladen mit diesem Teil, dann könnte man mal genauer reinschauen.
Gruß Tino
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
habe mal Application.ontime durch diese Zeile zum testen ersetzt.
Application.Run "'Monat " & Day(nDate) & "," & Month(nDate) & "," & Year(nDate) & "'"
Also bei mir wird im Ordner C:\Test diese Datei genau so angelegt.
Zuerst stand im Code Format(nDate, "_yyyy-mm"),
die Datei wurde mit dem Namen Milchdispo_2011-10.xls angelegt.
Dies geändert auf Format(nDate, "_yyyy-mmmm-dd"),
Datei mit dem Namen Milchdispo_2011-Oktober-31.xls wurde angelegt.
Fehlermeldung wurde keine ausgegeben.
Gruß Tino
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Tino. Vielen Dank fürs testen.
Wenn ich s genauso mache funktioniert es auch.
Aber ich habs getestet indem ich die systemzeit meines rechners auf den 31. oktober geändert und die zeit auf 23:59:40. dann habe ich die datenmaske aufgerufen und wieder geschlossen, gewartet bis mitternacht und dann legt es die datei auch genau so an wie ich will, aber beim öffnen ist die Zelle "G1". mit dem aktuellen Monat anstatt dem Vormonat beschriftet.
Gruss Sascha
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
kann sein das zum Zeitpunkt die Formel schon für den neuen Monat berechnet wurde.
Wir können auch das Datum das an Monat übergeben wird verwenden, dann müsste es ja passen.

Sub Monat(iTag%, iMonat%, iJahr%)
Dim nDate As Date, varValue
Call SchutzAus
'On Error Resume Next
ThisWorkbook.Sheets.Copy
With ActiveWorkbook
'Tabelle und Zelle anpassen
.Sheets("MSW1").Range("G1").Value = DateSerial(iJahr, iMonat, 1)
Application.DisplayAlerts = False 'Meldung unterdrücken
.SaveAs Filename:= _
"C:\Test\Milchdispo" & Format(nDate, "_yyyy-mmmm-dd"), FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True 'Meldung nicht mehr unterdrücken
.Close
End With
Call clean
End Sub
Gruß Tino
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Tino
Tud mir leid, aber das funktioniert auch nicht .
Ich bekomme eine neue Datei mit dem Format: Milchdispo_1899-Dezember-30.xls
und in "G1" steht immernoch der Falsche Monat.
Ich weiss es ist eine komplizierte Geschichte. Bin schon ewigs an einer Lösung.
Weiss nicht ob es eine gibt...?
Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
habe ausversehen die Zeile für nDate gelöscht, sorry.

Sub Monat(iTag%, iMonat%, iJahr%)
Dim nDate As Date, varValue
Call SchutzAus
'On Error Resume Next
ThisWorkbook.Sheets.Copy
nDate = DateSerial(iJahr, iMonat, iTag)
With ActiveWorkbook
'Tabelle und Zelle anpassen
.Sheets("MSW1").Range("G1").Value = DateSerial(iJahr, iMonat, 1)
Application.DisplayAlerts = False 'Meldung unterdrücken
.SaveAs Filename:= _
"C:\Test\Milchdispo" & Format(nDate, "_yyyy-mmmm-dd"), FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True 'Meldung nicht mehr unterdrücken
.Close
End With
Call clean
End Sub
Gruß Tino
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Hallo Tino,
ja super, so funktionierts... :-))
hab nur noch ein Problem... wenn sich die Mappe generiert und gespeichert hat, und ich sie wieder öffne, sind alle daten weg die ich eingegeben habe.
wo muss denn der befehl call clean hin?
LG Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
die neue generierte Datei ist ja nicht mehr offen, also kann in dieser auch nichts gelöscht werden.
Eventuell würde ich bei
For Each wks In Worksheets
mit dem Zusatz ThisWorkbook arbeiten,
damit ist sichergestellt das die Datei angesprochen wird in der auch Code läuft, also so.
For Each wks In ThisWorkbook.Worksheets
Haber es auch mal durchlaufen lassen mit der Umstellung der Systemzeit, bei mir stimmt es soweit.
Gruß Tino
Anzeige
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Sascha
Habs so gemacht. Kein Erfolg... :-(
wird immernoch alles gelöscht.
wenn ich displayalerts mit hochkomma versehe, werde ich 3mal gefragt ob ich s überschreiben will... wenn ich mit f8 schritt für schritt mache, dann sehe ich beim 2. mal ja überschreiben dass der code dann alles im zu sichernden workbook löscht. da liegt wo der fehler...
aber es kann auch sein dass es an meiner xl version liegt... habe Xl2000
welche version hast du?
ch muss wohl mal eine neuere Version installieren zum testen...
Gruss Sascha
AW: 1 Sekunde vor Monatswechsel Makro ausführen
Tino
Hallo,
gehe den Code komplett mit F8 durch.
Vielleicht findet sich so der Fehler, wird der Code mehrfach aufgerufen?
Ich habe xl2007.
Gruß Tino
Anzeige
genau so wird es sein...
Tino
Hallo,
, irgendwo rufst Du sehr wahrscheinlich mehrfach die OnTimeStarten auf.
Versuch es mal so und lösche die OnTime zuvor.

Sub OnTimeStarten()
'Speichern der Mappe Ende Monat
Dim nDate As Date
Call OnTimeAbbrechen
nDate = DateSerial(Year(Date), Month(Date) + 1, 1) - TimeSerial(0, 0, 1)
Application.OnTime nDate, "'Monat " & Day(nDate) & "," & Month(nDate) & "," & Year(nDate) & "'"
End Sub
Gruß Tino
AW: genau so wird es sein...
Sascha
Guten morgen.
Möchte fragen wie excel reagiert wenn ich den timer
Im workbook_open ereignis aufrufe.
Bleibt der timer dann aktiv solange die mappe geöffnet bleibt,
Auch über monate hinaus? Momentan lade ich den befehl
Immer wenn die uf auswahl_msw geladen wird.
Dies könnte auch mein problem sein
Lg sascha
AW: genau so wird es sein...
Hajo_Zi
Hallo Sascha,
das ist nur der halbe Code. Wir sehen nicht ob Du das Makro rekursiv aufrufst.
Das Ontime bleibt auch erhalten falls die Mappe geschlossen wird, es sei Du beendest es .

AW: genau so wird es sein...
Sascha
Hallo Hajo,
Prima. Vielen Dank :-)
AW: genau so wird es sein...
Tino
Hallo,
Hajo hat es ja schon geschrieben, dann müsste es so funktionieren.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call OnTimeAbbrechen
End Sub
Private Sub Workbook_Open()
Call OnTimeStarten
End Sub
Ob die Ontime auch auf so lange Zeit erhalten bleibt?
Denke schon, sehe zumindest keinen Grund warum diese nicht so sein soll.
Allerdings habe ich noch kein Programm für solch einen fall gehabt,
bei mir war es nur max. 24 Stunden.
Gruß Tino
AW: genau so wird es sein...
Sascha
Hallo Tino.
Vielen Dank, So klappts :-))
AW: besser in neuen Monat spreichern
Daniel
Hi
das was du da vorhast, ist gefährlich, denn dazu musst der Rechner zur geplanten Uhrzeit an sein, und Excel muss laufen.
Sicherer ist, die Datei beim ersten Öffnen im neuen Monat unter dem Namen des alten Monats zu speichern.
dazu muss dieser Code ins Modul: DIESE ARBEITSMAPPE.

Private Sub Workbook_Open()
Dim LetzesSpeicherDatum As Date
if Thisworkbook.Name like "*Archiv* then Exit Sub
LetzesSpeicherDatum = ThisWorkbook.BuiltinDocumentProperties(12)
If LetzesSpeicherDatum 
Der Code läuft automatisch bei jedem Öffnen der Datei und prüft, wann die Datei zum letzten Mal gespeichert wurde und legt eine Archiv-Datei an, wenn der aktuelle Monat grösser ist, als der Monat der letzten Speicherung.
Dabei erhält die so gespeicherte Datei den Namenszusatz "Archiv".
Dieser Namenszusatz wird auch verwendet um zu verhindern, daß die Monatsdatei von sich selbst wieder Sicherungen anlegt, dh die Monatsdateien müssen den Zusatz "Archiv" haben, die die aktuelle Arbeitsdatei darf ihn nicht haben, damit es funktioniert (das liegt daran, daß das Makro ja mit gespreichert wird und irgendwie deaktiviert werden muss)
Gruß, Daniel
AW: besser in neuen Monat spreichern
Sascha
Hallo Daniel,
Wir sind ein 7 Tage Betrieb, daher muss der Rechner IMMER an sein. Auch beimMonatswechsel wird diese Mappe nicht geschlossen und wieder geöffnet.
Es sei denn man kann dies per VBA irgendwie anders lösen...
Gruss Sascha
AW: besser in neuen Monat spreichern
Daniel
Hi
ja wenn die Datei IMMER geöffnet ist und nie geschlossen wird, dann reicht dieser Code, um automatsich am Monatsende eine Sicherungskopie unter dem Monatsnamen abzulegen:

Sub Monat_Archivieren()
ThisWorkbook.SaveCopyAs "C:\Test\Milchdispo" & Format(Date, "_MMMM_YYYY")
Application.OnTime DateSerial(Year(Date), Month(Date) + 2, 0) + TimeSerial(23, 55, 0), " _
Monat_Archivieren"
End Sub
das Makro muss 1x am Monatsende ausgefürt werden.
Dabei legt es die Sicherungskopie vom noch aktuellen Monat an und ruft sich für den letzten Tag des Folgemonats 23:55 wieder auf.
Dh wenn du das Makro jetzt starten würdest, dann würde es automatisch wieder am 30.11.2011 aufrufen und dann wieder am 31.12.2011 usw.
Das funktioniert auch über den Jahreswechsel.
Gruß, Daniel
AW: besser in neuen Monat spreichern
Sascha
Hallo Daniel,
Dein Code ergibt bei mir einen Syntaxfehler!!?
Sascha
AW: besser in neuen Monat spreichern
Daniel
Hi
dieser Code hat 2 Zeilen.
in welcher von beiden passiert denn der Syntaxfehler?
Warum denken Fragesteller nie daran, daß die Information, in welcher Zeile der Fehler passiert, hilfreich sien könnte um den Fehler schneller zu finden.
Ist dieser Gedanke so abwegig?
vielleicht noch zur Info:
die Forumsoftware hier bricht Codezeilen, die ihr zu lang sind automatisch in eine neue Zeile um.
Das sieht zwar genauso aus, wie wenn man sowas im VBA-Editor macht (Leerzeichen-Unterstrich-NeueZeile), wenn man aber den Code hier aus dem Forum dann in den Editor kopiert, erkennt er dieses nicht.
Dann muss man von Hand im Edior den Zeilenumbruch wieder entfernen, so daß eine Zeile entsteht.
das muss man halt wissen, wenn man Code hier rauskopiert und dann korrigeren.
Gruß, Daniel
AW: besser in neuen Monat spreichern
Sascha
Ja hast recht. Sorry
Es funktioniert...
Aber es macht eine Kopie der ganzen Mappe.
Was ich brauche ist:
- Meine Mappe beim Monatswechsel (kurz vor Mitternacht) NUR die Tabellenblätter Kopieren und in eine neue Mappe Einfügen
- Dîe Mappe soll in C:\Test kopiert mit dem Format Milchdispo_yyyy-mm-dd.xls
- Bei der neu generierten Mappe (nur die Tabellenblätter) soll in der Zelle "G1" Der Monatsname des Vormonats stehen. (Also wenn die Mappe automatisch am 31. Oktober Mitternacht kopiert wird, soll in derselben wenn ich sie öffne auch Oktober 2011 stehen.
Und hier die Mappe - Modul 5:
http://www.uploadagent.de/show-178824-1318610923.html
Für eine Hilfe wäre ich sehr dankbar
Gruss Sascha
AW: besser in neuen Monat spreichern
Daniel
Hi
eine neue Arbeitsmappe erstellt man mit Workbooks.Add
Blätter von einer Mappe in die andere kopieren kann man Sheets.Copy (weite Infos in der Hilfe)
wenn du auf diese Weise eine Arbeitsmappe erstellt hast oder ein Sheet erzeugt hast, dann ist jeweils das neue Objekt das ActiveWorkbook/ActiveSheet.
wenn du die Datei am 31. Oktober 23:59 speicherst, dann ist Oktober nicht der Vormonat, sondern der gleiche monat, also kannst dann in die Zelle G1 einfach das aktuelle Datum reinschreiben (Range("G1").Value = Date) und dann die Zelle mit dem Zahlenformat "MMMM" versehen.
Reichen dir die Informationen, daß du erst mal selber klar kommst?
Dein Link verweist auf einen Uploadservice und sowas mache ich nicht auf.
Nutze doch die Uploadfunkion des Forums, da muss ich nicht warten und auch keine Werbung ansehen, wenn ich deine Datei öffen will.
Gruß, Daniel
AW: besser in neuen Monat spreichern
Sascha
Hallo Daniel. Ich werde dies Morgen versuchen. Deine Angaben sollten reichen. Hilft schon sehr gut :-)
Vielen Dank schon mal...
Ich wollte die Mappe hier Uploaden, jedoch ist nur bis 300kb möglich... Meine Mappe hat das doppelte...
Liebe Grüsse
Sascha
AW: besser in neuen Monat spreichern
Daniel
Dann schmeiß halt ein paar Daten raus.
die Interessieren eh nur soweit, daß man den Aufbau der Tabelle und ggf vorhandene Sonderfälle erkennt.
Im Sinne des Datenschutzes und der Geheimhaltung solltest du sowieso nicht unbedingt oder wenn nur verfälschte Firmen- und Personendaten hier hochladen.
Gruß, Daniel
AW: besser in neuen Monat spreichern
Sascha
Hallo Daniel,
Ich habs geschafft, es funktioniert :-)
Vielen Dank
Sascha

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige