MS Access projecten - drama of succes?

Inleiding

Uw data goed organiseren, managen en automatiseren? Met het grootste gemak een zo hoog mogelijke efficiëntie bereiken? Als Microsoft Access specialist ontwikkel ik voor u een gegarandeerd succesvol project, inclusief een goede nazorg.

Mijn visie is dat er een grote verantwoordelijkheid op de schouders van elke leverancier rust om over de juiste middelen te beschikken. Want alleen met de juiste middelen is het mogelijk om snel en kwalitatief hoogwaardige producten en/of diensten te leveren, inclusief een goede nazorg met alles wat daarbij hoort.

Maar wat zijn de juiste middelen voor een MS Access project? De ervaring leert dat opdrachtgevers hieromtrent vaak onvoldoende van op de hoogte zijn. En dan is het moeilijk om de ware Access specialist te herkennen met het risico dat het project op een drama uitloopt. Door kritisch te zijn en niet te lichtvaardig te denken over wat de ontwikkelaar in huis heeft, kunt u dit voorkomen.

Ik wil u graag bijstaan door u betrouwbaar advies te geven dat de kern belicht: een authentiek vakmanschap zoals men het bij Microsoft graag ziet. Want dat is natuurlijk het hart van alles. U vindt het op deze pagina.

Hartelijke groet,
Peter van Loosbroek - Office Programs

Mensen - Proces - Product

Mijn visie is dat de mensen over bijzondere eigenschappen moeten beschikken omdat het de mensen zijn die het proces dirigeren. De kwaliteit van het proces komt uiteindelijk tot uiting in de kwaliteit van het product.

Een hoge mate van expertise (kennis + inzicht + ervaring) is onontbeerlijk. Goede kennis van zaken hebben is natuurlijk vanzelfsprekend, maar inzicht en ervaring zorgen voor een diepere dimensie en een verfijning van details. Hoe werkt dat?

Wanneer we vasthouden aan oude gedachte- en gewoontepatronen (conditionering), kan ons inzicht niet verruimen. Dan blijft het alleen bij concepten en de kennis die we al hadden. Echter, het loslaten van het oude en het bekende maakt ruimte voor een brede en begripvolle kijk op het hele gebeuren. En zorgvuldigheid gaat altijd gepaard met inzicht. Zo is inzicht een diepere dimensie dan louter conceptueel denken.

Zonder het vermogen los te laten is innovatie niet mogelijk. Want waar het oude is, daar kan het nieuwe niet zijn.

Tip Hieronder een paar voorbeelden van modellen uit de praktijk (Office Programs Orders). Deze applicatie kunt u straks bekijken via Home > Orders.


Systeem - Middelen - Innovatie

Lennart Ras (Steketee Yerseke): "Wij hebben voor een onderhoudscontract gekozen zodat onze applicatie altijd up-to-date is. Op deze manier kunnen we ook gebruik blijven maken van nieuwe toegevoegde functionaliteiten en worden bestaande functionaliteiten op deze wijze steeds geperfectioneerd."

Het is van het grootste belang dat een ontwikkelaar over een feilloos systeem beschikt. Dit kunt u in de eerste plaats herkennen aan een methodische en goed gestructureerde werkwijze. Essentieel: herbruikbare code en andere herbruikbare objecten. Zo hoeft het wiel niet steeds opnieuw te worden uitgevonden. Het zijn de middelen die een systeem vormen.

De kern van mijn systeem is dat vele functionaliteiten (middelen) continu worden geperfectioneerd en uitgebreid (al vanaf 1995). En om een goede nazorg te kunnen leveren worden ook reeds uitstaande applicaties daarmee bijgewerkt. De middelen worden dus steeds gereproduceerd en opnieuw gedistribueerd. Dit behelst de innovatie van zowel nieuwe als uitstaande applicaties. U kunt dit vergelijken met bijvoorbeeld het besturingssysteem Windows dat ook gebruik maakt van heel veel componenten (middelen). Samen vormen die het systeem en het moet allemaal perfect met 'elkaar kunnen praten'. Windows wordt verbeterd doordat onderdelen ervan worden verbeterd.

Een leverancier kan nog zoveel en nog zo'n goede programmeurs als eigen personeel hebben, maar als zij allemaal op een eigen manier werken is deze werkwijze nooit toepasbaar.

  • Fig. 1 toont het Development System (een interne tool). Het omvat 'middelen om middelen te maken'.
  • In Fig. 2 is te zien dat bouwstenen (middelen) centraal worden gereproduceerd en opnieuw gedistribueerd naar alle applicaties. Zoals ook Windows op vele computers wordt bijgewerkt.
  • In Fig. 3 wordt uw applicatie in spe weergegeven die gebruik maakt van diverse ondersteunende onderdelen (de herbruikbare code en andere herbruikbare objecten).
  • Fig. 4 is een voorbeeld van hoe meerdere middelen in mijn systeem een samenwerkend geheel vormen (zoals voor gedefinieerde teksten, werknemers, documenten, e-mail onderdelen etc.).

Binnen het systeem zijn geavanceerde hoogwaardige functionaliteiten. Als dat voor één klant gemaakt zo moeten worden, zou het onbetaalbaar worden.

Fig. 1

Fig. 2

Fig. 3

Fig. 4


Een systeem waarbij de middelen op deze wijze worden geïnnoveerd, is efficiënt in veel opzichten. Dit leidt tot:

  • Stabielere applicaties.
  • Meer en betere functionaliteiten.
  • Lagere kosten.

In de volgende rubriek zult u zien waarom.

De resultaten van het systeem

De middelen bestaan kortweg gezegd uit:

  • Herbruikbare programmacode (oftewel 'solide code'). Zie de Extra info sectie verderop.
  • Herbruikbare objecten (tabellen, formulieren, rapporten, interface etc.).
  • WT's (werktechnieken). Technieken die volgens een gestructureerd geheel worden toegepast om dezelfde soort taken mogelijk te maken.

De getoonde voorbeelden zijn beperkt. Het doel is immers dat u als opdrachtgever beter inzicht krijgt in wat professionele middelen zijn en dat de ontwikkelaar een goede systematiek hanteert.

Efficiënt en dynamisch

Dingen slechts één keer ontwikkelen en vervolgens ongelimiteerd hergebruiken. Dit kan alleen binnen een goed gestructureerd systeem.


Blauwdrukken

Fig. 1 is een schets van de Basiscomponenten. Eén van de vele componenten zijn de blauwdrukken. Afhankelijk wat er nodig is kan één blauwdruk diverse objecten omvatten zoals bijbehorende programmacode, formulieren, rapporten, tabellen etc. Een blauwdruk is een voorgeprogrammeerde WT (werktechniek) die in variabele omstandigheden kan worden toegepast. Dit kan alleen binnen een goed gestructureerd systeem.

Waarom de naam 'blauwdruk' en niet 'sjabloon'? De objecten van een blauwdruk worden steeds geperfectioneerd en bijgewerkt; van een sjabloon niet.

In Fig. 2 en 3 s dezelfde blauwdruk toegepast: de ene keer betreft het een offerte, de andere keer een factuur. Als u de screenshots bekijkt zult u zien dat alleen de naam van het tabblad en het bijschrift van het dialoogvenster van elkaar verschillen. De toegepaste methode (de techniek) is bij beide dialoogvensters gelijk. Achter de schermen speelt veel hergebruikte code.

Fig. 4 is ook dezelfde blauwdruk maar er is nu ook nog een tabblad Instellingen waar nog veel meer mogelijk is. Daar kan de gebruiker op een makkelijke wijze selecteren wat gewenst is. Zeer geavanceerde SQL voor de gewenste data wordt achter de schermen met code opgebouwd. Het resultaat is altijd goed. Op het eerste tabblad zijn dezelfde functionaliteieten als bij Fig. 2 en Fig. 3.

De blauwdruk heeft ook mogelijkheden om met dezelfde selectie die door de gebruiker is gemaakt, nog veel meer te doen. Bijvoorbeeld de data exporteren naar Excel en vervolgens Excel functies toe te passen, de layout van rapporten instellen, een specifiek rapport genereren zoals een Interactief rapport (screenshot), en nog veel, veel meer moois.

Deze blauwdruk is er slechts één van de vele... Zo hebben we bijvoorbeeld ook blauwdrukken van professionele rapporten die allemaal een consitente structuur hebben met geweldige bijbehorende functionaliteiten. Straks kunt u hier voorbeelden van bekijken.

Fig. 1

Fig. 2

Fig. 3

Fig. 4


Transparantie

Hopelijk bent u nu redelijk goed op de hoogte bent van wat de juiste middelen in deze zijn. Een ontwikkelaar moet de essentie van zijn middelen en werkwijzen laten zien en toelichten. Precies zoals u in een fabriek een kijkje moet kunnen nemen van hoe uw keuken (of wat dan ook) gemaakt wordt. Die transparantie geeft u meer zekerheid.

Praktijkvoorbeelden

Er zijn vele, vele voorbeelden te geven van hoe het niet moet. En hoewel het ook goed is om dat te zien, neem ik u liever mee naar positieve dingen. Mijn woordkeuze 'drama' is eigenlijk genoeg en zeker niet overdreven. Want 'drama' is vaak de enige juiste definitie van de MS Access projecten die ik tegenkom. Nee, ik ben niet negatief; het is de realiteit. Mensen zitten met pijnlijke problemen in hun maag.

Denk niet te lichtvaardig, wees kritisch. Verkeerde inkopen worden vaak gedaan omdat er bij opdrachtgevers te weinig kennis is en/of geen goed vooronderzoek is gedaan.

Denk niet dat als 'er 150 programmeurs voor u klaar staan' of als het een groot bedrijf is, dat het dan wel goed zit...

Je kan een renpaard een mooie naam geven, maar daar wint het de wedstrijd niet mee.

In de sectie Extra info hierna, zijn nog wat extra tips en voorbeelden voor degene die wat meer details willen weten. De eerste rubriek betreft een verantwoording over de Basiscomponenten - de voorgeprogrammeerde middelen waarmee uw applicatie wordt gebouwd.

Praktijkvoorbeelden van hoe mijn systeem werkt kunt u het beste bekijken via de volgende pagina's:

Tip U kunt altijd alle essentiële pagina's via Home bereiken. U zult steeds dezelfde systematiek overal terug herkennen: een authentiek vakmanschap zoals men het bij Microsoft graag ziet.

Extra info

Verantwoording Access Application System

Het Access Application System omvat de Basiscomponenten waarmee uw applicatie is voorzien. Het zijn voorgeprogrammeerde middelen voor een professionele bouw. Deze worden voortdurend geperfectioneerd en uw applicatie wordt er minimaal 1 keer per jaar mee bijgewerkt. Zo worden applicaties geïnnoveerd en onderhouden.


  • De Basiscomponenten zijn van toepassing op maatwerk applicaties en huur/koop applicaties zoals Orders, Factuur, Oer etc.
  • De onderwerpen kunt u bekijken op de locaties waar in de tabel naar wordt verwezen.
  • Tip Tussen de rubrieken door ontdekt u tevens hoe uw applicatie met de beschikbare middelen kan worden uitgebreid.
  • Open alvast de pagina's Voorbeelden en Basisicomponenten zodat u de onderwerpen direct kunt bekijken.
Verantwoording Access Application System
Wat Waar
Werknemers Basiscomponenten > Werknemers.
Documentenbeheer Voorbeelden > Mappenstructuur en Documentenbeheer.
Inlogsysteem Basiscomponenten > Inlogsysteem.
Interface Basiscomponenten > De Interface.

Sinds Office 2007 heeft Microsoft haar programma's uitgerust met de 'linten' oftewel de FUI (Fluent User Interface). Door deze interface zijn opdrachten middels een pictogram visueel gemaakt waardoor gebruikers de benodigde taken snel zullen vinden. Alle Office Programs Access applicaties zijn voorzien van FUI.

De interface in een Office Programs Access applicatie is een mooi voorbeeld van gestructureerdheid en consistentie. De opbouw van de structuur is overal consistent, zowel voor het navigeren door de applicatie als voor alle overige zaken. Alle soorten opdrachten zitten altijd op dezelfde vertrouwde plek zodat gebruikers ze altijd snel en makkelijk kunnen vinden. Precies zoals u dat ook gewend bent bij elke Microsoft Office applicatie.

BackEnd onderhoud tool Backstage View > Onderhoud.
Stuurgegevens Voorbeelden > Stuurgegevens.
Opties instellen Voorbeelden > Opties instellen.
Berichten en teksten Basiscomponenten > Berichten en teksten.
Ondersteunende procedures Procedures vormen de kern van de applicatie.

Op deze tekening (screenshot) wordt in alle eenvoud het begrip bouwstenen oftewel middelen getoond. In de meeste middelen wordt een combinatie van programmeertalen gebruikt.

Dit geeft een extra krachtige impuls aan het geheel, want hierdoor worden de bouwstenen (de middelen) naar een nóg hoger niveau getild.

In elke Office Programs Access applicatie zijn honderden procedures opgenomen die verantwoordelijk zijn voor vele complexe taken. De voorbeelden die u op de website aantreft zijn daar slechts een klein deel van. Mocht u straks bijzondere wensen hebben, dan mag u er van uitgaan dat nagenoeg alles mogelijk is.

Updatesysteem Het BackEnd en het FrontEnd zijn beide voorzien van codes.

De structuur (vaak ook de inhoud) van het BackEnd moet in overeenstemming zijn met het FrontEnd (screenshot). Dit wordt aangestuurd door het Application Managing System (screenshot). Wanneer een update in gebruik wordt genomen wordt door het updatesysteem gecontroleerd of de juiste versies (van BackEnd en FrontEnd) aan elkaar worden gekoppeld.

Taal aansturing Er is een WT (werktechniek) aanwezig waarmee taal gerelateerde documenten kunnen worden ontwikkeld. Het is één van de blauwdrukken.

Voorbeelden > Taal gerelateerde documenten.

Office modules Hierin zijn een aantal mogelijkheden. Er zijn standaardfuncties én er zijn de middelen om uit te bouwen tot extra functionaliteiten.

Voorbeeld Microsoft Excel

Op de pagina Exporteren wordt de standaard exportfunctie en aangepaste exportfunctie weergegeven. De aangepaste exportfunctie is een blauwdruk (zie verderop) die kan worden ingezet.

Voorbeeld Microsoft Outlook

Op de pagina Basiscomponenten > Outlook functies zijn standaardfuncties weergegeven. In dezelfde rubriek wordt verwezen naar de pagina Voorbeelden wordt verwezen naar uitgebreidere functies.

Voorbeeld Microsoft Word

Voor Word is al een volledige module aanwezig. Zie de pagina Module Tekstbeheer.

Foutafhandeling Wat een gebruiker (of het systeem) ook maar voor acties kan uitvoeren, voor alles moet een mogelijk fout worden onderschept. Dit gaat veel verder dan u voor mogelijk houdt. Een paar veelzeggende voorbeelden kunt u bekijken bij:
  • Basiscomponenten > Controle bij de invoer.
  • Basiscomponenten > Beveiliging tegen ongeoorloofd verwijderen.
Blauwdrukken Voorgeprogrammeerde functionaliteiten (bouwstenen) die kunnen worden gebruikt als u objecten laat bouwen. Hierdoor worden ontwikkelingskosten gereduceerd. 'Blauwdrukken' is meerzeggend voor u, maar het zijn WT's (werktechnieken). In de loop der jaren zijn er technieken/werkwijzen ontstaan om dingen te kunnen bouwen.

Het correct invoeren van data is natuurlijk gevoelig. Daarom is er voor een formulier ook een blauwdruk. Dat moet wel, want een formulier (en elk besturingselement op dat formulier) heeft vele eigenschappen (properties), gebeurtenissen (events) en methoden (methods). En niet te vergeten de gebruikers die allerlei dingen kunnen doen... Alle fouten moeten dus goed worden onderschept waarvoor een goede systematiek nodig is.

Opmerking De voorbeelden die u op de website ziet, zijn allemaal voortgekomen uit blauwdrukken oftewel consistente werktechnieken.

Online Help Basiscomponenten > De documentatie.
Maatwerk Help Basiscomponenten > De documentatie.
Vreemde valuta Basiscomponenten > Vreemde valuta.
Samenwerkende functionaliteiten Voorbeelden (diverse rubrieken); Backoffice > De efficiënte samenhang.
Extra module(s) Backoffice (als voorbeeld); Bekijk modules via deze knop:

Geen Active-X elementen

Afgezien van een goed doordachte opzet en structuur, is het niet gebruiken van Active-X elementen de belangrijkste factor als het gaat om de continuïteit en levensduur van uw applicatie. Waarom is dat zo en wat zijn Active-X elementen?

Windows maakt gebruik van de Application Programming Interface oftewel API, om het besturingssysteem aan te sturen. Deze API functies kunnen vanuit Access, Excel etc. worden aangestuurd, maar dat vergt extra expertise. Om dit te vergemakkelijken kunnen ontwikkelaars gebruik maken van Active-X elementen, bijvoorbeeld om een bestand of een folder aan te wijzen. Echter, dit brengt wel de volgende problemen met zich mee:

  • Active-X elementen zijn bestandjes die op een systeem moeten worden geïnstalleerd wat we sowieso liever niet doen.
  • In de VBE (Visual Basic Editor) van Access moet een verwijzing zijn ingesteld. Bij verplaatsing van bestanden, PC opnieuw inrichten etc., geeft dat een probleem.
  • Active-X elementen zijn - i.v.m. updates - versie afhankelijk.
  • Active-X elementen zijn ook bit versie afhankelijk (32 of 64 bits).

Microsoft raadt het gebruik van Active-X elementen ten strengste af vanwege de compatibiliteit met de modernste technologie. Een ontwikkelaar kan API routines schrijven waarmee de API functies rechtstreeks door Windows zelf worden uitgevoerd. Dus zonder tussenkomst van een Active-X element. Maar zoals gezegd vereist dat extra expertise waardoor ze toch vaak door ontwikkelaars worden gebruikt (maar niet door Office Programs).

Office: 32 of 64 bit?

Met de komst van Office 2010 kan worden gekozen voor een 32 of 64 bit versie. Voor 64 bit-applicaties moeten API aanroepen speciaal zijn aangepast. Voor een Office Programs Access applicatie maakt het niet uit of u 32 of 64 bit gebruikt, ondanks de geïmplementeerde API functies.

Tip Als u Office installeert kunt u onder normale omstandigheden het beste voor de 32 bit versie gaan. Wilt u de 64 bit versie, dan moet u dat tijdens de installatie expliciet aanwijzen en dat is niet zonder reden. U heeft alleen de 64 bit versie nodig als u met zeer grote Excel bestanden werkt.

Voorbeelden van solide code

'Solid code' oftwel 'solide code', 'betrouwbare code' wordt vooral zo genoemd omdat deze programmacode geschikt is voor hergebruik (reuseable code). Het resultaat van een procedure (een blokje code) is altijd hetzelfde, dus als de procedure goed geschreven is, is de code betrouwbaar.

Kort gezegd zijn er (o.a.) procedures die een waarde teruggeven (procedure Function) en procedures die een opdracht uitvoeren (procedure Sub). Procedures worden ook wel 'threads' (draadjes) genoemd omdat ze met elkaar verweven kunnen zijn.

Een systeem opbouwen dat is gebaseerd op solide en herbruikbare code is het allerbelangrijkste fundament voor het samenstellen van modules en uiteindelijk applicaties.


CalcAge

Deze procedure (Function) geeft altijd de juiste leeftijd terug. Functies kunnen overal worden aangeroepen: via een query, via een besturingselement, via andere procedures, via het lint, en zelfs via een SQL-instructie.

  • Goede procedures zijn uit voorzorg voorzien van een fout afhandelingsroutine.
  • De procedures MsgErr en MT in de fout afhandeling, zijn eveneens procedures ('threads') die in al mijn procedures worden hergebruikt.
  • CalcAge is een 'gebruikers gedefinieerde procedure'. Procedures als IsDate, DateSerial, Month, Day, Date, zijn VBA procedures.

Aan dit eenvoudige voorbeeld is al te zien dat het een 'samenhangend systeempje' vormt. Procedures kunnen zeer complex zijn en het systeem zeer groot. Het moet daarom goed in elkaar steken.

Function CalcAge(dteBirthdate As Date) As Long

    Dim lngAge As Long

    

    On Error GoTo Bye_Err

    ' Ga na of de doorgegeven waarde een datum is.

    If Not IsDate(dteBirthdate) Then

        dteBirthdate = Date

    End If

    

    ' Ga na of dteBirthdate in de toekomst ligt. Zo ja, gebruik dan de systeemdatum.

    If dteBirthdate > Date Then

        dteBirthdate = Date

    End If

    

    ' Bereken het verschil in jaren tussen vandaag en dteBirthdate.

    lngAge = DateDiff("yyyy", dteBirthdate, Date)

    ' Mocht dteBirthdate dit jaar nog niet hebben plaatsgevonden, trek dan 1 voor de leeftijd af.

    If DateSerial(Year(Date), Month(dteBirthdate), Day(dteBirthdate)) > Date Then

        lngAge = lngAge - 1

    End If

    CalcAge = lngAge

    

Bye_End:

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

FindRecordCount

Deze procudure (Function) geeft het aantal records terug uit een op te halen Recordset die bepaald wordt met het doorgegeven (variabele) argument strSQL. Het tellen van records kan in heel veel gevallen nodig en nuttig zijn.

Voor een groot aantal taken zet ik DAO en SQL erg vaak in omdat dat een applicatie erg dynamisch maakt. Wanneer dit niet wordt beheerst moeten er o.a. veel Query's (QueryDefs) worden gemaakt waardoor er een onbeheersbare situatie gaat ontstaan. Ik gebruik zelden QueryDefs, maar bouw recordsets e.d. in variabele omstandigheden vanuit centraal gedefinieerde en flexibele procedures op. Want hoe vaker we dingen maar één keer hoeven te doen, des te efficiënter.

Function FindRecordCount(strSQL As String) As Long

' Voor meer, zie VB - Effectief records tellen.

    Dim db     As DAO.Database

    Dim rst     As DAO.Recordset

    

    On Error GoTo Bye_Err

    

    Set db = CurrentDb

    Set rst = db.OpenRecordset(strSQL)

    If rst.EOF Or rst.BOF Then

        FindRecordCount = 0

    Else

        rst.MoveLast

        FindRecordCount = rst.RecordCount

    End If

    

Bye_End:

    Set rst = Nothing

    Set db = Nothing

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

CountFiles

Het kunnen omgaan met bestanden en mappen is één van de dingen die vaak terugkomen. Hier is er één uit mijn omvangrijke arsenaal.

CountFiles geeft het aantal bestanden in een specifieke map en (optioneel) inclusief de bestanden in de submappen.

In dit voorbeeld wordt getoond dat er geen Active-X element wordt gebruikt hetgeen erg belangrijk is.

Function CountFiles(strPath As String, Optional lngCount As Long = 0, Optional blnRecursive As Boolean) As Long

' Deze procedure telt het totaal aantal bestanden in strPath, inclusief de bestanden in subfolders.

' Bij een fout geeft de functie 0 als resulaat omdat 0 de standwaardwaarde voor een Long is.

' Daarom MOET strPath eerst worden gecontroleerd voordat de functie wordt aangeroepen.

' strPath     - Het volledige pad van de eerste map.

' blnRecursive - Indien True worden ook alle bestanden in submappen teruggegeven.

' lngCount     - De teller. Is als een 'optioneel' argument gedeclareerd omdat dit argument in de lus voor recursive

'                 aanroep moet worden meegegeven. Houdt steeds de standaardwaarde aan.

' Voor meer, zie doc FileSystem Object.

    

    Dim fso         As Object

    Dim fld         As Object

    Dim sfl         As Object

    

    On Error GoTo Bye_Err

    

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set fld = fso.GetFolder(strPath)

    lngCount = lngCount + fld.Files.Count

    If blnRecursive Then

        For Each sfl In fld.Subfolders

            CountFiles sfl.Path, lngCount, True

        Next sfl

    End If

    CountFiles = lngCount

    

Bye_End:

    Set fso = Nothing

    Set fld = Nothing

    Set sfl = Nothing

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function

Afdrukmoment

Op documenten hoort vaak een datum met tijd van wanneer het document is afgedrukt of gemaakt. Dit regel ik met mijn functie Afdrukmoment. Omdat in mijn applicaties documenten taal gerelateerd kunnen zijn (Nederlands en Engels), heb ik ook routines geschreven om de gehele datum-tijd reeks in het Engels terug te geven. Want de landinstellingen onder Windows kunnen maar beter met rust gelaten worden...

Voor de Nederlandse weergave worden gewoon VBA functies gebruikt.
Voorbeeldresultaat: maandag 20 Augustus 2018 23:17:54

Voor de Engelse weergave zorgen mijn functies TranslateDate en FMDLongTime. Let op de hoofdletters en komma's.
Voorbeeldresultaat: Monday, August 20, 2018 23:17:54

Function Afdrukmoment() As String

' Wordt in documenten gebruikt waar Lang is ingesteld.

' Zie doc Rapporten.

    

    On Error GoTo Bye_Err

    

    Select Case Lang

        Case "NED"

            Afdrukmoment = Format(Date, "Long Date") & " " & FMDLongTime(Time)

        Case "ENG"

            Afdrukmoment = TranslateDate(Date, "Long Date") & " " & FMDLongTime(Time)

    End Select

    

Bye_End:

    Exit Function

Bye_Err:

    MsgBox MsgErr, vbCritical, MT

    Resume Bye_End

End Function