• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Macro voor automatisch oplsaan kopie werkmap

Status
Niet open voor verdere reacties.

Boerlo

Gebruiker
Lid geworden
14 jan 2021
Berichten
40
Ik zoek een macro die iedere dag automatisch op een vaste tijd een kopie opslaat van de geopende werkmap. De werkmap is altijd geopend en Excel wordt niet afgesloten. Op een vaste tijd moet het bestand opgeslagen worden onder zijn eigen naam, maar daarnaast ook als een kopie (xlsm) genoemd naar de datum.

Ik kwam dit tegen https://www.exhelp.be/vba/automatische-back-up-bij-opslaan-van-bestand/

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 
ActiveWorkbook.SaveCopyAs "C:\TEMP\Mijn Back-ups\" & _
                          Format(Now, "yyyymmddhhmmss") & "_" & _
                          Application.UserName & "_" & _
                          ActiveWorkbook.Name
 
End Sub

Maar daar moet dan nog een tijd aan gekoppeld worden, en het opslaan onder de eigen naam...
 
Edmoor, bedankt! Het was even zoeken en uitproberen met de verschillende opties, maar het is uiteindelijk gelukt. Ik heb nu de volgende code gebruikt om iedere dag om 12.00 het originele bestand op te slaan:

Code:
Sub opslaan()
Application.OnTime TimeSerial(12, 0, 0), "opslaan"
Dim answer As Integer
answer = MsgBox("Het is nu " & Format(Now, "hh:mm") & ". Vanavond om 23:59 wordt een kopie opgeslagen. Wil je nu het originele bestand tussentijds opslaan?", vbQuestion + vbYesNo + vbDefaultButton1, "Bestand tussendoor opslaan")
If answer = vbYes Then ActiveWorkbook.Save Else
End Sub

Daarnaast nog een andere code om tegen middernacht dagelijks een kopie van de werkmap op te slaan:

Code:
Sub kopie_opslaan()
Dim ThisFileName As String
Dim BaseFileName As String
Dim FileNameArray() As String
ThisFileName = ThisWorkbook.Name
FileNameArray = Split(ThisFileName, ".")
BaseFileName = FileNameArray(0)
ActiveWorkbook.SaveCopyAs "D:\Gebruikers\NNN\Documenten\2021\Backups\" & BaseFileName & " - " & Format(Now, "yyyy.mm.dd") & ".xlsm"
Application.OnTime TimeSerial(23, 59, 0), "kopie_opslaan"
End Sub

Maar ik het nog 1 vraag:
Bij de eerste code, kan ik dat bestand ook op laten slaan ZONDER dat er de bevestiging wordt gevraagd om het originele bestand te overschrijven?

Dank.
 
Gebruik net voor het opslaan:
Code:
Application.DisplayAlerts = False
Na het opslaan weer op True zetten.
 
Kijk eens naar dit voor je eerste code:
Code:
Sub opslaan()
    Application.OnTime TimeSerial(12, 0, 0), "opslaan"
    If MsgBox("Het is nu " & Format(Now, "hh:mm") & vbCrLf & vbCrLf & _
        "Vanavond om 23:59 wordt een kopie opgeslagen. Wil je nu het originele bestand tussentijds opslaan?", _
        vbQuestion + vbYesNo + vbDefaultButton1, "Bestand tussendoor opslaan") = vbYes Then
        Application.DisplayAlerts = False
        ThisWorkbook.Save
        Application.DisplayAlerts = True
    End If
End Sub
 
Bedankt, deze macro is inderdaad mooier, en eenvoudiger. Ik kom in veel voorbeelden op forums tegen dat in macro's in zulke gevallen gewerkt wordt met DIM as INTEGER. Ik begrijp dat niet helemaal, kopieer het gewoon en ga er dan wat mee proberen. Maar wat houdt dit precies in? Wanneer moet je dit WEL gebruiken en wanneer is het eigenlijk niet nodig...?
 
De opdracht Dim declareert een variabele van een bepaald datatype.
In een kleine macro zoals die van jou is dat niet nodig, tenzij je Option Explicit aan zet.
Dit dwingt het declareren van variabelen af.

In grotere projecten met meerdere modules, Subs en Functions die gegevens van elkaar nodig hebben is dit wel aan te raden en vaak dan ook gewoon nodig.
En er valt nog heel veel meer over te vertellen.
 
Laatst bewerkt:
Ik heb in dit workbook meerdere modules (7x) veel subs en een paar funtions. In sommige gevallen heb ik codes met DIM gebruikt. Ik probeer telkens per onderwerp van forums af te halen wat ik zoek, daar ga ik dan mee proberen om uit te dokteren hoe het werkt. Ook neem ik vaak een macro op om dan te kijken hoe deze in VisualBasic wordt geschreven om er wijzer van te worden. Zo kom ik stapje voor stapje verder en doet het workbook precies wat ik wil, maar het workbook is intussen best wel groot geworden, en ik weet zeker dat veel van mijn macro's omslachtig zijn. Of dat nu betekent dat ik DIM moet gebruiken, weet ik niet. Ik zal er wel vanzelf achter komen.

Hartelijk dank voor de uitleg en de goede hulp.
 
Als ik een bestand wil opslaan klik ik gewoon op de daarvoor uitgevonden knop. Hoe laat het is staat bij mij in de taakbalk dus lijkt mij overbodig om te vermelden net als de hele procedure. :d
 
Daar heb je gelijk in, maar veel mensen vergeten tussen door op te slaan. Het verschil tussen "willen" en "doen" is groot. Daar is dit een mooie oplossing voor. Het programma staat altijd open, dus als je bijv. om 15.00 achter de computer aanschuift, zie je dat de melding van 12.00 nog openstaat, m.a.w. tussen 12.00 en 15.00 zijn er geen wijzigingen geweest. Je kunt dan kiezen of je wilt opslaan of niet: je bent er in ieder geval aan herinnerd, maar kunt er ook vanaf zien. De andere macro is voor een automatische backup (onder een andere naam) om middernacht, dus je kunt altijd terug naar de backup van daags tevoren. Dat was de insteek. "Als je het paard vergeet naar het water te leiden, drinkt het zeker niet" ;) Bedankt voor de hulp!
 
Excel heeft de ingebakken optie automatisch opslaan. Los van dat het leuk is om een beetje met VBA te stoeien zie ik het probleem niet. Gebruikers moet je zo min mogelijk lastig vallen met onnodige meldingen. Code moet je alleen gebruiken als het noodzakelijk is. Maar wat werk dat werkt.:d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan