• 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.

Ieder jaar op 1 januari een messagebox bij openen bestand

Status
Niet open voor verdere reacties.

vrouw

Terugkerende gebruiker
Lid geworden
27 mrt 2010
Berichten
1.434
Hi all,

Is het mogelijk om een excel file zo te maken dat :
ieder jaar op 1 januari een messagebox bij openen van het bestand komt?
 
ja, dat is mogelijk, maar dan moet je wel dat bestand openen op die 1e januari, als die al geopend is of pas op 2 januari geopend wordt, dan ben je er aan voor de moeite.
Een simpele "workbook_open"-macro in ThisWorkbook
 
Hmm, daar had ik niet over nagedacht.

Dan word het idd een stuk lastiger vrees ik want kans is héél groot dat het niet op 1 januari word geopend maar een paar dagen later.
De melding zou dan alleen in de eerste 2 weken van het nieuwe jaar moeten komen (maar dat is niet te doen vrees ik)
 
Ik ben benieuwd wat de gedachte is aan die melding.
Een actie die handmatig uitgevoerd moet worden voordat je veilig verder kan werken?

In dat geval kan je het ook automatiseren.
Ik ben geen kei in VB maar je kan vast wel wat bouwen dat er bijv. een tabblad automatisch wordt aangemaakt als het huidige jaar nog niet als tabblad bestaat.

Dus vertel eens meer.

Of je zou een extra database kunnen opzetten die zo relationeel mogelijk is, zodat je daar geen rekening mee hoeft te houden.
maar zonder een duidelijk verhaal is het koffiedik kijken.
 
Laatst bewerkt:
Dan word het idd een stuk lastiger vrees ik want kans is héél groot dat het niet op 1 januari word geopend maar een paar dagen later.
De melding zou dan alleen in de eerste 2 weken van het nieuwe jaar moeten komen (maar dat is niet te doen vrees ik)
Dat lijkt me geen enkel probleem.
Plaats eens een documentje waarin je dat zou willen.
 
Als je jou vraag sec beantwoord dan is het niet zo spannend.

hier moet je een eind mee komen in de Thisworkbook module

Code:
Private Sub Workbook_Open()

If today >= IsDate("1.1." & Year(today)) And today <= IsDate("15.01." & Year(today)) Then MsgBox prompt:="Er is een nieuw jaar begonnen"

End Sub

en om de code met vandaag tm 15 aug te testen kun je deze in een gewone module (bijv Module1)

Code:
Sub Testnu()

If today >= IsDate("31.7." & Year(today)) And today <= IsDate("15.08." & Year(today)) Then MsgBox prompt:="Er is een nieuw jaar begonnen"

End Sub


Maar net als Aar denk ik dat er wel iets meer achter je vraag zit van wat je nu precies wilt bereiken.
 
Het gaat om onderstaande code die werkt als het 2021 is.

Als het 2022 is moet ik dat weer aanpassen voor de werkbladen die dan over 2022 gaan.

Code:
Private Sub Workbook_Open()

  With Sheets("2021").Cells(1).CurrentRegion
    .AutoFilter 1, "<" & CLng(Date)
    .Offset(1).Copy Sheets("Verleden 2021").Cells(Rows.Count, 1).End(xlUp).Offset(1)
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
  
End Sub
 
Ik denk dat aanpassen naar een automatisch werkend script een beter idee is dan enkel een alert te tonen.
Zal je net zien dat je opeens een andere werknemer hebt, die na drie weken inlogt en de melding niet ziet, en je datasheet dus verprutst.

In Engeland zeggen ze ook:
"Assumptions are the mother of all fƯck-ups!"
 
Laatst bewerkt:
Ik denk dat aanpassen naar een automatisch werkend script een beter idee is dan enkel een alert te tonen.
[/I]

Ik had dat geprobeert met onderstaande maar dat werkte niet:

Code:
Private Sub Workbook_Open()

  With Sheets("2021"&"2023"&"2023").Cells(1).CurrentRegion
    .AutoFilter 1, "<" & CLng(Date)
    .Offset(1).Copy Sheets("Verleden 2021"&"Verleden 2023"&"Verleden 2023").Cells(Rows.Count, 1).End(xlUp).Offset(1)
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
  
End Sub
 
Laatst bewerkt:
Je hebt dus een werkblad met als naam "202120232023"?
 
Code:
Private Sub Workbook_Open()
   On Error Resume Next
   hj = ThisWorkbook.Names("Huidig_Jaar").RefersToR1C1 'lees waarde van gedefinieerde naam "Huidig_Jaar" uit
   On Error GoTo 0
   If VarType(hj) = vbEmpty Then ThisWorkbook.Names.Add Name:="Huidig_Jaar", RefersToR1C1:="=xxx" 'naam bestond nog niet, dan aanmaken met dummy-inhoud

   If hj <> "=" & Year(Date) Or Format(Date, "ddmm") = "0101" Then MsgBox "Het is weeral nieuwjaar !!!!", vbInformation 'jaar verschilt van huidig jaar of we zijn nog steeds 1 jan, dan msgbox
   ThisWorkbook.Names("Huidig_Jaar").RefersToR1C1 = "=" & Year(Now)  'huidig jaar erin zetten
End Sub
 
Dan kan dit uiteraard niet:
Sheets("2021"&"2023"&"2023")
 
Dan kan dit uiteraard niet:
Sheets("2021"&"2023"&"2023")

Dan moet het zo?
Code:
Private Sub Workbook_Open()

  With Sheets(Array("2021", "2022", "2023")).Cells(1).CurrentRegion
    .AutoFilter 1, "<" & CLng(Date)
    .Offset(1).Copy ("Sheets(Array("Verleden 2021", "Verleden 2020", "Verleden 2023")).Select").Cells(Rows.Count, 1).End(xlUp).Offset(1)
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
  
End Sub
 
Dat denk ik niet, maar met een voorbeeld documentje krijg je sneller en beter antwoord.
 
Losse tabjes met eenduidige data is nooit een goed idee.
Code:
Private Sub Workbook_Open()
  With Sheets(cstr(year(date))).Cells(1).CurrentRegion
    .AutoFilter 1, "<" & CLng(Date)
    .Offset(1).Copy Sheets("Verleden "&year(date)).Cells(Rows.Count, 1).End(xlUp).Offset(1)
    .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
 End Sub
 
@ edmoor hierbij een voorbeeld bestand.
@ VenA In het voorbeeld bestand heb ik nu jouw code ingezet maar met openen direct een error.
Ook word wel de regel met de datum in het verleden van 2021 bij het openen verplaatst naar het tabblad 'verleden 2021'. (dat gaat goed.
Echter om te testen ook een datum in het verleden in de sheet '2022' gezet en daar word de regel niet verplaatst naar 'verleden 2022'
 

Bijlagen

  • Voorbeeld.xlsb
    63,1 KB · Weergaven: 16
Als je er niets van begrijpt dan kan je beter geen VBA gebruiken. Wat zal Year(Date) doen? Daarnaast is het onzinnig om alles in losse tabjes te zetten. Als je code uitvoert op een werkblad waar ook Events in staan dan moet je deze even uitzetten anders loop je het risico dat het hele zaakje in de soep loopt.
Voor het huidige jaar
Code:
Private Sub Workbook_Open()
  Application.EnableEvents = False
  With Sheets(CStr(Year(Date))).ListObjects(1).Range
    .AutoFilter 1, "<" & CLng(Date)
    .Offset(1).Copy Sheets("Verleden " & Year(Date)).Cells(Rows.Count, 1).End(xlUp).Offset(1)
    If .Columns(1).SpecialCells(2).Count > 1 Then .Offset(1).EntireRow.Delete
    .AutoFilter
  End With
  Application.EnableEvents = True
 End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan