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

Probleem met datumconversie in VBA

Status
Niet open voor verdere reacties.

Severijns

Gebruiker
Lid geworden
6 jul 2018
Berichten
139
Geachte forumleden,

Ik heb een probleem met datumconversie via VBA.
Ik laat via VBA een aantal datums in cellen zetten.
Deze datums zijn afkomstig uit de werkbladnaam.
Aansluitend laat ik via VBA controleren of deze datums ouder zijn dan een bepaald aantal dagen.
Er verschijnt een "popup" indien het bepaald aantal dagen is overschreden.
Het probleem is echter dat de datums via VBA automatisch in het format mm-dd-jjjj worden gezet ondanks dat de celeigenschap het format dd-mm-jjjj aangeeft.
Hoe kan ik er voor zorgen dat de datums automatisch middels VBA of een formule in het juiste (dd-mm-jjjj) format worden gezet.
Er wordt gebruik gemaakt van MS Excel 2013.

Bij voorbaat dank,

Rob
 

Bijlagen

Zoiets ?

Code:
Sub joske()
    i = InputBox("Breng uw datum in")
        Range("A5").Value = FormatDateTime(Month(i) & "-" & Day(i) & "-" & Year(i))
  
End Sub

Gr,

Joske
 
misschien zo?

Code:
 Private Sub Workbook_Open()
    
    Sheets("Detail").Select
    Range("A1").Value = Format(Date, "mm-dd-yyyy") & " " & Format(Time, "hh:mm")
    Range("A2").Value = Left(Sheets(2).Name, 10)
    Range("A3").Value = Left(Sheets(3).Name, 10)
    Range("A4").Value = Left(Sheets(4).Name, 10)
    Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).NumberFormat = ("mm-dd-yyyy")
    
    If Range("A1").Value < Now() - 14 Or Range("A2").Value < Now() - 30 Or Range("A3").Value < Now() - 30 Or Range("A4").Value < Now() - 30 Then
         Frm_Status.Show
    End If

End Sub

zal vast ook anders kunnen
 
Joske,

Bedankt voor jouw reactie.
Helaas werkt de door jou ingebrachte oplossing in mijn geval niet.
Er moet gekeken worden naar de waardes in A2 t/m A4 en niet een datum die ik zelf invoer.


Mde,

Ook jij bedankt voor jouw reactie.
Helaas is ook dat niet de oplossing.
Op de een of andere manier wordt de datum uit de werkbladnaam automatisch omgezet in het format mm-dd-jjjj
Jou VBA code laat wel is waar de datum zien als dd-mm-jjj maar er wordt nog steeds gerekend als zijnde mm-dd-jjjj

Rob
 
probeer het eens zo.
Code:
Private Sub Workbook_Open()
    
    Sheets("Detail").Select
    Range("A1").Value = Format(Date, "dd-mm-yyyy") & " " & Format(Time, "hh:mm")
    Range("A2").Value = Left(Sheets(2).Name, 10)
    Range("A3").Value = Left(Sheets(3).Name, 10)
    Range("A4").Value = Left(Sheets(4).Name, 10)
    
    Range("A2").Value = Format(Range("A2").Value, "dd-mm-yyyy")
    Range("A3").Value = Format(Range("A3").Value, "dd-mm-yyyy")
    Range("A4").Value = Format(Range("A4").Value, "dd-mm-yyyy")
    
    
    If Range("A1").Value < Now() - 14 Or Range("A2").Value < Now() - 30 Or Range("A3").Value < Now() - 30 Or Range("A4").Value < Now() - 30 Then
         Frm_Status.Show
    End If

End Sub
 
Ad,

Bedankt voor jouw reactie.
Jouw aanvulling in de VBA code zet de datum in het juiste format weg.
Edoch gooit uiteindelijk de berekening in VBA middels NOW() roet in het eten.
Op de een of andere manier kijkt NOW() naar het datumformat mm-dd-jjjj en vergelijkt dat met de waarden in A2 t/m A4

Het datumdeel uit de werkbladnaam is natuurlijk niet echt een datum maar tekst.
Die tekst zal omgezet moeten worden naar een datumwaarde.
Wellicht dat daar een oplossing ligt. Ik zal ook nog verder zoeken.

Rob
 
Rob,

Je schrijft "Ik laat via VBA een aantal datums in cellen zetten."
Er moet gekeken worden naar de waardes in A2 t/m A4.

Dus op het moment dat de waarden worden weggeschreven naar A2 t/m A4 via VBA kan je je datums toch correct wegschrijven met mijn module ?
Of zie ik het anders ?

Groet,

Joske
 
Joske,

Misschien bedoelen we beide het zelfde maar begrijpen we elkaar verkeerd. Al kan het ook aan mijn kennis van VBA liggen.
In het voorbeeldbestand staan maar 4 werkbladen maar met een werkmap met meer dan 20 werkbladen is het niet handig om elke keer dat het document wordt geopend handmatig de juiste datum handmatig in te vullen.
Op dit moment komen de datums in cellen A2 t/m A4 uit de werkbladnaam en deze worden automatisch via VBA gegenereerd.
Pas daarna wordt er via VBA gekeken of de ingegeven waarde voldoet aan het criterium zoals deze in VBA, middels NOW(), wordt gegenereerd.

Rob
 
Volgens mij werkt de code goed, zie rode tekst in cel C2
Wat gaat er dan volgens jou fout.
 

Bijlagen

Ad,

Bedankt.
Ik zie het.
Heb even geen idee waarom het in eerste instantie in het orginele bestand niet goed werkte.
Ik kom er straks nog even op terug.

Rob
 
Ad,

Bedankt. Het werkt inderdaad.
Ik heb denk ik ergens een typefoutje gemaakt. :o

Rob
 
Voor 18-08-2020 zal het prima werken, maar niet voor de eerste 12 dagen.

Doe maar eens.
Code:
Range("A1").Value = Format(Date - 12, "dd-mm-yyyy")
18-8-2020 - 12 dagen = 6-8-2020, maar het geeft 8-6-2020.

Suggestie:
Code:
Range("A1").Value = Format(Now, "[COLOR=#ff0000]mm-dd[/COLOR]-yyyy  h:mm")
Of zet de opmaak op datum+tijd en schrijf.
Code:
range("a1") = now
 
Code:
Sub M_snb()
   Cells(1) = Now
   Cells(2, 1) = 1 * Now
   Cells(3, 1) = Format(Now, "yyyy-mm-dd hh:mm")
End Sub
 
HSV en SNB,

Bedankt voor jullie aanvullingen.
Zal deze zeker meenemen.
Ik laat nog wel even weten wat het uiteindelijk is geworden.
Zo hebben anderen er mogelijk ook nog wat aan.

Rob
 
Allen,

Dit is hem geworden.
Werkt met datums voor en na de 12e van de maand.
Celeigenschappen voor A2 t/m A4 zijn ingesteld op Datum *13-04-2012

Code:
Private Sub Workbook_Open()
    
    Sheets("Detail").Select
    Range("A1").Value = Format(Date, "mm-dd-yyyy") & " " & Format(Time, "hh:mm")
    Range("A2").Value = Left(Sheets(2).Name, 10)
    Range("A3").Value = Left(Sheets(3).Name, 10)
    Range("A4").Value = Left(Sheets(4).Name, 10)
    
    Range("A2").Value = Format(Range("A2").Value, "dd-mm-yyyy")
    Range("A3").Value = Format(Range("A3").Value, "dd-mm-yyyy")
    Range("A4").Value = Format(Range("A4").Value, "dd-mm-yyyy")
    
    If Range("A1").Value < Now() - 14 Or Range("A2").Value < Now() - 30 Or Range("A3").Value < Now() - 30 Or Range("A4").Value < Now() - 30 Then
         Frm_Status.Show
    End If

End Sub

Iedereen nogmaals bedankt voor de hulp en adviezen :d

Rob
 

Bijlagen

Code:
Range("A1").Value = now
    range("a1").numberformat = "dd-mm-yyyy hh:mm"
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan