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

datumformat bij macro gebruik

AnnevdD

Verenigingslid
Lid geworden
8 mei 2007
Berichten
249
Als ik in een cel in een leeg spreadsheet 02-08 in type dan zie ik daarna 2-aug staan en is de celinhoud 2-8-2025. Maar als ik een macro:
Sub x()
Cells(1, 1) = "02-08"
End Sub
uitvoer dan komt er 8 feb te staan en is de celinhoud 8-2-2025.

Hoe kan ik voorkomen dat in een macro het formaat wordt omgedraaid.
Het programma waar het om gaat weet niet van te voren wat voor waarde er in de cel geplaatst gaat worden, dus het kan geen opmaak van die cel voorbereiden.
Ik zoek dus naar een algemene instelling.
 
In een voorbeeldbestandje is dat gemakkelijk voor te doen.
ps. Plaats code tussen codetags.
 
Maak er dit van:
Code:
Sub x()
    Cells(1, 1) = DateValue("02-08")
End Sub
Of:
Code:
Sub x()
    Cells(1, 1) = "'02-08"
End Sub
 
Of zoiets dergelijks?
Code:
Range("A1").NumberFormat = "dd/mm/yyyy"
 
Ook/Of:
Code:
Cells(1) = cdate("02-08")
 
Als ik in een cel in een leeg spreadsheet 02-08 in type dan zie ik daarna 2-aug.
Hoe kan ik voorkomen dat in een macro het formaat wordt omgedraaid.
Niemand legt je uit wat er precies gebeurt, dus dat moet dan maar even. Om te beginnen: als je in een cel niet met een = teken begint, zoekt Excel zelf uit wat je intypt. "2-8" (waarom typ je überhaupt voorloopnullen? Die worden toch genegeerd.) wordt als een datum van het huidige jaar beschouwd, en Excel vindt dan dat die 'datum' moet worden weergegeven als "2 aug". Mooi en of bruikbaar? Mwah... Wil je de datum er netjes uit laten zien, dan moet je dus ook nog de cel (of de kolom) de gewenste datum opmaak geven. Of, als je een volledige datum wil zien, typ óók twee of vier cijfers van het jaartal mee. Dus de invoer "2-8-25" geeft het juiste resultaat in een cel.

Zet je middels VBA een datum in een cel, dan moet je weten dat Excel dat doet op basis van de Amerikaanse datum notatie. En die is: maand-dag-jaar. En dan zie je dus in de cel niet 2 augustus, maar 8 februari. Op die regel is één uitzondering: als de waarde van de dag groter is dan 12. Omdat er (behalve bij werkgevers) geen dertiende maand bestaat, geeft het middels VBA aanmaken van de datum 13-8 dus wél 13 augustus als resultaat. Daarom moet je dus, als je met een macro een datum in een cel plaatst, trucjes (functies) gebruiken om de datum correct als resultaat te geven.
Dat doe je dan met één van de aangedragen opties.
 
Sorry, ik was even kwijt hoe je code moet weergeven. Hierbij dus nog eens:
Code:
Sub x()
Cells(1, 1) = "02-08"
Cells(2, 1) = "'" & "02-08"
End Sub
Cell(2,1) (edmoor) is een oplossing.
Ook de anderen bedankt voor het meedenken. En Octafish bedankt voor de uitleg.
Omdat het programma waar het om gaat weet niet van te voren wat voor waarde er in de cel geplaatst gaat worden, kan het geen opmaak van die cel voorbereiden en kunnen de oplossingen die een formaat opleggen dus ook niet.
Ik hoopte dat je ergens zou kunnen instellen dat er ook bij macro's voor datums met dd-mm-jjjj formaat gewerkt wordt. Raar genoeg gaat het met handmatige invoer wel goed. Je zou, denk ik, moeten kunnen instellen dat VBA niet met de Amerikaanse datum maar met de standaard datum moet werken.
 
Mijn 2e "oplossing" maakt het geen datum maar gewone tekst.
Prima als je dat wilt natuurlijk, maar dan kan je er niet meer mee rekenen.
Voor correcte uitleg van datum gebruik in Excel VBA, zie de link van jkpieterse in #8.
 
Terug
Bovenaan Onderaan