Macro om datum in Calc veld te plaatsen

Soms is het handig om in een Calc bestand vast te leggen wanneer dat voor het laatst is opgeslagen en/of afgedrukt.

Na veel zoekwerk en het nodige plagiaat heb ik daarvoor een macro samengesteld die bij het opslaan van een Calc bestand de datum in Cel B3 plaatst.

Sub SetSaveDateInCell
Dim oSheet As Object
Dim oCell As Object
Dim lFormatID As Long

' Vervang "Blad1" door de naam van het werkblad
oSheet = ThisComponent.Sheets.getByName("Informatie") 

' Vervang "A1" door de cel waarin de datum moet komen
oCell = oSheet.getCellRangeByName("B3") 
   
' Voeg de huidige datum en tijd in (als een vaste waarde)

oCell.NumberFormat = 130 'oCell.NumberFormat = “DD-MM-JJJJ hh:mm:ss” als alternatief
oCell.Value = Now()
End Sub

Dat werkt, maar als ik deze macro in een ander Calc bestand gebruik dan verschijnt niet de datum in het gewenste format ( DD-MM-JJJJ hh:mm:ss ) maar de datum als getal zonder opmaak. Er gaat dus iets fout met de formatcode van het datumveld.

Ik heb tijdens mijn speurtocht gelezen dat het beter is een aangepast datumformat te forceren met oCell.NumberFormat = “DD-MM-JJJJ hh:mm:ss” in plaats van oCell.NumberFormat = 130, maar dat levert ook niet het gewenste resultaat op.

Wie heeft de oplossing zodat ik deze macro in meerdere Calc bestanden kan gebruiken met als resutaat overal hetzelfde format van het datumveld??

Alvast bedankt!

Misschien moet je de doelcel opmaken met een stijl die in het document is opgeslagen. Verwijder de opmaak zowel in de macro en verwijder ook directe opmaak.
De variabele oCell heeft ook de eigenschap voor het toevoegen van een stijl-naam zoals je die ziet in “Stjjlen en opmaak”.

Volgens mij bedoel je dan zoiets als

oCell.NumberFormat = “DD-MM-JJJJ” ??

Dat heb ik geprobeerd maar dan krijg ik alleen de datum als getal zonder verdere opmaak, dus dat werkt (bij mij) niet.

Nee ik bedoel letterlijk

oCell.NumberFormat = "DD-MM-JJJJ" ?? 

moet niet in de macro worden opgenomen. Het betekent ook dat je het doel document moet opmaken en hiervoor moet je leren hoe de opmaak in LibreOffice werkt.

Daarnaast moet je je gaan verdiepen in de opmaak van je document. Eerst moet je leren wat de normale werking is van LibreOffice in dit geval hoe maak ik een document. Het omwerking van een een Microsoft document naar LibreOffice zonder een goede kennis van zowel Microsoft Office naar LibreOffice is erg moeilijk.
.
Toen ik begon met OpenOffice ben ik begonnen met het bestuderen van de werking van allle menu opdrachten. De laatste paar jaar ben ik ook begonnen met het aanpassen van de werkbalken. Op die manier leerde ik allerlei kleine opdrachten van libreoffice die maar met een paar woorden beschreven worden. De kleine opdrachten die ik hier bedoel zijn allemaal samen te vatten onder dispatcher opdrachten.
Op het Engelse deel van dit forum vertelt Villeroy vaak over de normale werking van LibreOffice waarbij hij gebruik maakt van alleen menu-opties of een kleine API aanroep die uitgaat van de normale werking maar hij kan ook zeer gedetailleerde macro’s schrijven die van een grote kennis van de API van LibreOffice getuigt.
Ik hoop dat dit je wat richting geeft.

Dank voor je uitvoerige uiteenzetting. Na ruim 40 jaar met paketten van MS gewerkt te hebben kan ik niet meer echt de moed opbrengen om mij Libreoffice eigen te gaan maken zoals je dat beschrijft.

Eigenwijs als ik ben, ben ik toch verder gegaan met mijn zoektocht en zowaar met succes. De volgende macro doet precies wat ik wil en werkt tot nu toe in alle Calc bestanden waarmee ik werk.

Sub SetPrintDateInCel
Dim oDoc As Object
Dim oSheet As Object
Dim oCell As Object
Dim oFormats As Object
Dim aLocale As New com.sun.star.lang.Locale
Dim sFormatString As String
Dim Ikey As Long

oSheet = ThisComponent.Sheets.getByName("Informatie") 
oCell = oSheet.getCellRangeByName("A2") 
oCell.String = "afgedrukt op:"
oCell = oSheet.getCellRangeByName("B2")

oDoc = ThisComponent
sFormatString = "DD-MM-JJJJ uu:mm:ss"
oFormats = oDoc.NumberFormats
Ikey = oFormats.queryKey(sFormatString, aLocale, True)
oCell.NumberFormat = Ikey

oCell.Value = Now()

End Sub