Exceltabelle am Monatsende automatisch speichern, schließen und leere Vorlage öffnen

PHW

Level-1
Beiträge
32
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Nachdem ich nicht nur das Forum hier, sondern auch andere durchforscht und studiert habe, bin ich leider noch nicht auf die Lösung meines Problems gestoßen!
Ich hoffe das mir hier jemand weiterhelfen kann!

Zu meiner Frage etwas Hintergrundwissen ;)

Ich protokolliere mithilfe einer Exceldatei den Zustand einer bzw. mehrerer Variablen in WinCC. Das ganze basiert auf einer OPC-DA Verbindung und funktioniert auch sehr gut. Beim Öffnen der Exceldatei wird automatisch der OPCClient gestartet (VBA Skript) und schreibt die Zustände der Variablen mit.
Die aufgezeichneten Daten werden dann als Kreisdiagramm graphisch dargestellt.

Zur eigentlichen Frage:

Ich möchte die Datei am Monatsende automatisch abspeichern (z.B. unter C:\Zielordner\Oktober) und dann eine neue vorbereitete Exceldatei öffnen. Bei der würde ja dann die Aufzeichung wieder automatisch starten.
Am Monatsende wieder automatisch speichern (dann unter C:\Zielordner\November) und wieder die leere Datei öffnen, usw.

Mein Wissen was Hochsprachen angeht ist leider sehr beschränkt und komme hier einfach nicht weiter!
Wär nett wenn mir jemand einen Lösungsvorschlag machen könnte, bzw. mir irgendwie weiterhelfen kann.

Danke schonmal für die Mühe und schöne Grüße
Philipp
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Super Danke!
Vielleicht hab ich auch einfach nur nach dem falschen gesucht...excel schließen neu öffnen vba..bla bla bla

Manchmal sieht man den Wald vor lauter Bäumen nicht!
Danke, ich meld mich wenn ich erfolgreich war!

Grüße

Edit: Wobei diese verlinkte Funktion ja "nur" ermittelt wieviele Tage der Monat hat und diese als Fenster ausgibt!
Die Datei speichern tut es so auch, wenn auch nicht mir dem aktuellen Monatsnamen. Aber ich denke das bekomm ich hin!
Aber die Folgedatei wird bei mir so nicht geöffnet!
 
Zuletzt bearbeitet:
Hallo,
das bekommst du doch mittels Funktion "ActiveWorkbook.SaveAs " quasi schon geliefert. Damit hast du die Datei mit dem "neuen" Namen ...

Gruß
Larry
 
Jap, da hast du Recht!

Aber ich möchte das ja in Verbindung mit dem Monatswechsel.

D.h. wenn ein neuer Monat beginnt die Datei abspeichern und eine neue Datei öffnen! Komm einfach nicht klar damit!

Ich bekomm ein Makro hin das eine atei unter einem gewissen Namen speichert, aber dann hört es leider auf mit meinen geistigen Ergüssen ;) Mit "ActiveWorkbook.SaveAs" kann ich zwar speichern, aber der Sinn besteht ja darin das automatisch zu machen, ohne manuell noch eingreifen zu müssen!

Wenn ich das Skript habe das eben so funktioniert kann ich den Rest noch anpassen...Dateinamen etc. Aber soweit komm ich leider nicht!

Die oben genannte Monatsende-Funktion bringt mir leider auch nichts!
 
Das wär natürliche auch eine Lösung. Habs eigentlich mehr mit SPS-Programmierung, da sind mir Flanken geläufig^^

Wie kann ich das mit VBA realisieren?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wenn der Rechner wirklich immer durchläuft dann ginge es so, wie von Rainer beschrieben. Ist er aber irgendwann einmal aus (vielleicht über den Monatswechsel) so könnte man auf gleichem Weg auch den Monat vergleichen - allerdings mit einem in der Tabelle abgespeicherten Wert.

Gruß
Larry
 
Hallo,

ich würde das z.B. so lösen:

Code:
Private Sub Workbook_Open()
    Dim datum As String
    Const pfad As String = "C:\Zielordner\"
    
    datum = Format(Now, "mmmm")
    
    If Dir(pfad & datum & "*") = "" Then
        ThisWorkbook.SaveAs pfad & datum & ".xls"
        Workbooks.Open pfad & "Vorlage.xls"
        ThisWorkbook.Close False
    End If

End Sub
Falls es nicht beim Öffnen passieren soll, kannst Du auch diese beiden
Subs nehmen:
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
End Sub
oder

Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
End Sub
 
Dankeschön, das sieht genau nach dem aus was ich brauche!

Mein Stand ist gerade folgender:

Code:
Sub Test()


    Dim aktDate As Date   'aktuelles Datum
    Dim endDate As Date  'Monatsende
      
    aktDate = Day(Now()) & "." & Month(Now()) & "." & Year(Now())
    
    endDate = DateSerial(Year(aktDate), Month(aktDate) + 1, 1) - 1
     
    If (aktDate = endDate) Then
    ActiveWorkbook.SaveAs Filename:="C:\Users\Administrator\Desktop\Verfügbarkeit_" & endDate & ".xlsm"
    
    End If
    
End Sub

Also das speichern funktioniert, allerdings müsste ich so ja dann das Problem haben, dass es eben 24h immer wiederholt wird?
das aktDate= endDate ist ja 24h "true"...aber vielleicht kann ich das ja mit der Uhrzeit noch erschlagen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dankeschön, das sieht genau nach dem aus was ich brauche!

Mein Stand ist gerade folgender:

Code:
Sub Test()


    Dim aktDate As Date   'aktuelles Datum
    Dim endDate As Date  'Monatsende
      
    aktDate = Day(Now()) & "." & Month(Now()) & "." & Year(Now())
    
    endDate = DateSerial(Year(aktDate), Month(aktDate) + 1, 1) - 1
     
    If (aktDate = endDate) Then
    ActiveWorkbook.SaveAs Filename:="C:\Users\Administrator\Desktop\Verfügbarkeit_" & endDate & ".xlsm"
    
    End If
    
End Sub

Also das speichern funktioniert, allerdings müsste ich so ja dann das Problem haben, dass es eben 24h immer wiederholt wird?
das aktDate= endDate ist ja 24h "true"...aber vielleicht kann ich das ja mit der Uhrzeit noch erschlagen!


Application.OnTime now + timevalue("24:00:00"), "test"
 
Also das speichern funktioniert, allerdings müsste ich so ja dann das Problem haben, dass es eben 24h immer wiederholt wird?
das aktDate= endDate ist ja 24h "true"...aber vielleicht kann ich das ja mit der Uhrzeit noch erschlagen!

... wie ich schon geschrieben habe ... ich würde mir irgendwo an nicht relevanter Stelle im Sheet das ablegen, dass ich schon gearbeitet habe und dies als zusätzliche Bedingung mit einbauen - vielleicht so :
Code:
If (aktDate = endDate) and ([A1]=0) Then
    ActiveWorkbook.SaveAs ...
    [A1]=1
else
   [A1]=0
End If
Gruß
Larry
 
Wie wäre es damit?

Code:
Private Sub Workbook_Open()
    Dim aktDate As Date   'aktuelles Datum
    Dim endDate As Date  'Monatsende
    Const pfad As String = "C:\Users\Administrator\Desktop\Verfügbarkeit_"
      
    aktDate = Format(Now(), "dd.mm.yyyy")
    
    endDate = DateSerial(Year(aktDate), Month(aktDate) + 1, 1) - 1
     
    If Dir(pfad & endDate & "*") = "" Then
        If (aktDate = endDate) Then
            ActiveWorkbook.SaveAs Filename:=pfad & endDate & ".xlsm"
        End If
    End If
End Sub
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Top Sache ;) Vielen Dank für die Hilfe, auch an die natürlich, die sich mit meinem Problem beschäftigen!

So siehts jetzt aus!

Code:
    Sub Workbook()
    Dim aktDate As Date   'aktuelles Datum
    Dim endDate As Date   'Monatsende
    Const pfad As String = "C:\Users\Administrator\Desktop\Verfügbarkeit_"
      
    aktDate = Format(Now(), "dd.mm.yyyy")
    
    endDate = DateSerial(Year(aktDate), Month(aktDate) + 1, 1) - 1
     
    If Dir(pfad & endDate & "*") = "" Then
        If (aktDate = endDate) Then
            ActiveWorkbook.SaveAs Filename:=pfad & endDate & ".xlsm"
            Workbooks.Open pfad & "Vorlage.xlsm"
            ThisWorkbook.Close False
        End If
    End If
End Sub

Wenn ich diese Zeile richtig verstehe wird die Datei innerhalb der 24h nur einmal abgespeichert. Nähmlich dann, wenn die Datei noch NICHT existiert. Nachdem sie das erste mal abgespeichert wurde springt er aus der if-Anweisung wieder raus. Nur das ich das richtig verstanden habe ;)
 
Noch ein Frage:

Wo genau muss ich das Skript einbinden das es beim öffnen automatisch gestartet wird?

Habs jetzt mit Private Sub Workbook_Open()
in Modul 1 eingebunden?

edit: habs gefunden...diese Arbeitsmappe wars :)
 
Zuletzt bearbeitet:
Und das nächste Problem:

Habs um zu testen mal mit meiner PC Uhr simuliert, dabei ist mir folgendes Problem aufgefallen:

Beim Start wird die ganze Prozedur gestartet:

wenn das "aktDate <> endDate" ist, passiert nichts (ist ja auch gut so).

wenn sich dann das Datum so ändert, dass "aktDate = endDate" ist passiert auch nichts :confused:

Wenn allerdings das "aktDate = endDate" ist und erst dann die Datei geöffnet wird, dann funktioniert es.

Hab meins zur Vorsicht nochmals angehängt:

Code:
Sub Workbook_Open()
    Dim aktDate As Date   'aktuelles Datum
    Dim endDate As Date   'Monatsende
    Const pfad As String = "C:\Users\Administrator\Desktop\Verfügbarkeit_"
      
    aktDate = Format(Now(), "dd.mm.yyyy")
    
    endDate = DateSerial(Year(aktDate), Month(aktDate) + 1, 1) - 1
        
    If Dir(pfad & endDate & "*") = "" Then
        If (aktDate = endDate) Then
            ActiveWorkbook.SaveAs Filename:=pfad & endDate & ".xlsm"
            Workbooks.Open pfad & "Vorlage.xlsm"
            ThisWorkbook.Close False
        End If
    End If
    
End Sub
Muss man da mit einer Schleife arbeiten?
Denn jetzt wird das gestartet beim Öffnen...wenn die Bedingung nicht erfüllt ist, also "endDate <> aktDate" ist, dann ist das ja für das Programm erledigt und es kommt ja gar nicht mehr an den Anfang des if-Blocks?
 
Zurück
Oben